Я сделал приложение, предназначенное для подготовки файлов к переводу с использованием списков регулярных выражений.
Он запускает каждое регулярное выражение в файле, используя Regex.Replace. Существует также модуль инспектора, который позволяет пользователю видеть совпадения для каждого регулярного выражения в списке.
Это работает хорошо, за исключением случаев, когда регулярное выражение содержит обратную ссылку, Regex.Replace ничего не заменяет, но инспектор показывает соответствия правильно (поэтому я знаю, что регулярное выражение действительно и соответствует тому, что должно).
sSrcRtf = Regex.Replace(sSrcRtf, sTag, sTaggedTag,
RegexOptions.Compiled | RegexOptions.Singleline);
sSrcRtf содержит код RTF страницы. sTag содержит регулярное выражение в скобках. sTaggedTag содержит $ 1, окруженный кодом форматирования тега.
Чтобы привести пример:
sSrcRtf = Regex.Replace("the little dog", "((e).*?\1)", "$1",
RegexOptions.Compiled | RegexOptions.Singleline);
не работает. Но
sSrcRtf = Regex.Replace("the little dog", "((e).*?e)", "$1",
RegexOptions.Compiled | RegexOptions.Singleline);
делает. (конечно, есть некоторый код RTF около $ 1)
Есть идеи, почему это так?