Project

General

Profile

Actions

Bug #16108

closed

gsub gives wrong results with regex backreferencing and triple backslash

Added by VivianUnger (Vivian Unger) over 4 years ago. Updated over 4 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]
[ruby-core:94402]

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!

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0