: nth-match ( match regexp n -- slice/f )
match-group-regexp [ skip-first-match ] [ first-match ] bi* ;
-:: update-match-group ( str match regexp n -- str' )
- n H{ } [ 1 + CHAR: $ swap "" 2sequence ] cache :> x
- x str subseq? [
- x match "" like regexp n nth-match str replace
- ] [ str ] if ;
+: update-match-group ( str match regexp n -- str' )
+ [ nth-match ] [ CHAR: 1 + "$%c" sprintf ] bi swap replace ;
: update-match-groups ( str match regexp -- str' )
+ [ >string ] dip
dup #match-groups [ update-match-group ] 2with each-integer ;
GENERIC: fixup-end ( match regexp end -- end' )