@@ -189,3 +189,108 @@ check 'End of line' \
189189' testing tests' \
190190' s/s$/x/g' \
191191' testing testx'
192+
193+ # Captures and groups
194+
195+ checkb ' Capturing group' \
196+ ' Name is Remi!' \
197+ ' s/^.*is \(.*\)!$/\1/' \
198+ ' Remi'
199+ checke ' Capturing group' \
200+ ' Name is Remi!' \
201+ ' s/^.*is (.*)!$/\1/' \
202+ ' Remi'
203+
204+ checkb ' Non-capturing parentheses' \
205+ ' Some (dumb)text' \
206+ ' s/(.*)//g' \
207+ ' Some text'
208+ checke ' Non-capturing parentheses' \
209+ ' Some (dumb)text' \
210+ ' s/\(.*\)//g' \
211+ ' Some text'
212+
213+ checkb ' Backreference' \
214+ ' ab be cd cc df' \
215+ ' s/\([a-z]\)\1/xx/g' \
216+ ' ab be cd xx df'
217+ checke ' Backreference' \
218+ ' ab be cd cc df' \
219+ ' s/([a-z])\1/xx/g' \
220+ ' ab be cd xx df'
221+
222+ # Look-around not supported in POSIX
223+
224+ # Multiplicity
225+
226+ checkb ' 0 or 1' \
227+ ' bb bab baab baa?b baaab' \
228+ ' s/baa\?b/x/g' \
229+ ' bb x x baa?b baaab'
230+ checke ' 0 or 1' \
231+ ' bb bab baab baa?b baaab' \
232+ ' s/baa?b/x/g' \
233+ ' bb x x baa?b baaab'
234+
235+ checkb ' 0 or 1 (negative)' \
236+ ' bb bab baab baa?b baaab' \
237+ ' s/baa?b/x/g' \
238+ ' bb bab baab x baaab'
239+ checke ' 0 or 1 (negative)' \
240+ ' bb bab baab baa?b baaab' \
241+ ' s/baa\?b/x/g' \
242+ ' bb bab baab x baaab'
243+
244+ checkb ' 1 or more' \
245+ ' bb bab baab ba+b baaab' \
246+ ' s/ba\+b/x/g' \
247+ ' bb x x ba+b x'
248+ checke ' 1 or more' \
249+ ' bb bab baab ba+b baaab' \
250+ ' s/ba+b/x/g' \
251+ ' bb x x ba+b x'
252+
253+ checkb ' 1 or more (negative)' \
254+ ' bb bab baab ba+b baaab' \
255+ ' s/ba+b/x/g' \
256+ ' bb bab baab x baaab'
257+ checke ' 1 or more (negative)' \
258+ ' bb bab baab ba+b baaab' \
259+ ' s/ba\+b/x/g' \
260+ ' bb bab baab x baaab'
261+
262+ checkb ' Specific number (1)' \
263+ ' bb bab baab baaab baaaab' \
264+ ' s/ba\{2\}b/x/g' \
265+ ' bb bab x baaab baaaab'
266+ checke ' Specific number (1)' \
267+ ' bb bab baab baaab baaaab' \
268+ ' s/ba{2}b/x/g' \
269+ ' bb bab x baaab baaaab'
270+
271+ checkb ' Specific number (closed)' \
272+ ' bb bab baab baaab baaaab' \
273+ ' s/ba\{1,3\}b/x/g' \
274+ ' bb x x x baaaab'
275+ checke ' Specific number (closed)' \
276+ ' bb bab baab baaab baaaab' \
277+ ' s/ba{1,3}b/x/g' \
278+ ' bb x x x baaaab'
279+
280+ checkb ' Specific number (open left)' \
281+ ' bb bab baaab baaaab' \
282+ ' s/ba\{,3\}b/x/g' \
283+ ' x x x baaaab'
284+ checke ' Specific number (open left)' \
285+ ' bb bab baaab baaaab' \
286+ ' s/ba{,3}b/x/g' \
287+ ' x x x baaaab'
288+
289+ checkb ' Specific number (open right)' \
290+ ' bb bab baaab baaaab' \
291+ ' s/ba\{2,\}b/x/g' \
292+ ' bb bab x x'
293+ checke ' Specific number (open right)' \
294+ ' bb bab baaab baaaab' \
295+ ' s/ba{2,}b/x/g' \
296+ ' bb bab x x'
0 commit comments