Bug #16108
closedgsub gives wrong results with regex backreferencing and triple backslash
Description
I have written a script to convert LaTeX indexing files (.idx) to Macrex backup format (.mbk), so that I can import LaTeX-embedded indexes into the Macrex indexing program. A problem arises when I try to convert bolded text. LaTeX indicates bolded text with the tag \textbf{} while Macrex wraps it in backslashes: \.
In my test case, the input string is "\indexentry{\textbf{bold}|hyperpage}{2}", which I need to convert into "\indexentry{\bold|hyperpage}{2}". For this I am using:
record.gsub(/\textbf{([^\}]+)}/, '\\1\')
But instead of the expected output, I get:
\indexentry{\1|hyperpage}{2}
...as if I only had \ rather than \.
I have tried the same Regex in a search-and-replace in Notepad++ and it works as expected. It's only in Ruby that I get this unexpected result.
The kludgey workaround I have found is to leave a space before the \:
record.gsub(/\textbf{([^\}]+)}/, '\ \1\')
...giving the result:
\indexentry{\ bold|hyperpage}{2}
But this won't do. Macrex complains and the extra space has to be edited out. Imagine if you have hundreds of lines with bold text in them!