我製作了一個應用程序,用於使用正則表列準備翻譯文件。Regex.Replace似乎不適用於反向引用
它使用Regex.Replace在文件上運行每個正則表達式。還有一個檢查器模塊,允許用戶查看列表上每個正則表達式的匹配。
它工作得很好,除非正則表達式包含一個back-reference,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美元左右)
任何想法爲什麼這是?
感謝。我沒有意識到,外面的括號會在本身內計算回參考。對於替換,這只是一個例子。在實際的代碼中,$ 1被一些RTF代碼所包圍,這些代碼根據所需樣式的類型而生成。我沒有發佈整件事情,因爲它有點長,可能會分散眼前的問題。 – Sylverdrag