How to backreference in Ruby regular expression (regex) with gsub when I use grouping?
You can backreference in the substitution string with \1
(to match capture group 1).
t = "First sentence. Second sentence.Third sentence!Fourth sentence?Fifth sentence."t.gsub(/([.!?])([A-Z1-9])/, "\\1\n\\2") # => "First sentence. Second sentence.\nThird sentence!\nFourth sentence?\nFifth sentence."
- If you are using
gsub(regex, replacement)
, then use'\1'
,'\2'
, ... to refer to the match. Make sure not to put double quotes around thereplacement
, or else escape the backslash as in Joshua's answer. The conversion from'\1'
to the match will be done withingsub
, not by literal interpretation. - If you are using
gsub(regex){replacement}
, then use$1
,$1
, ...
But for your case, it is easier not to use matches:
t2 = t.gsub(/(?<=[.\!?])(?=[A-Z1-9])/, "\n")
If you got here because of Rubocop complaining "Avoid the use of Perl-style backrefs." about $1, $2, etc... you can can do this instead:
some_id = $1# orsome_id = Regexp.last_match[1] if Regexp.last_matchsome_id = $5# orsome_id = Regexp.last_match[5] if Regexp.last_match
It'll also want you to do
%r{//}.match(some_string)
instead of
some_string[//]
Lame (Rubocop)