1
我有下面的代碼片段:正則表達式反向引用替換怪胎
var escapedBlock = Regex.Escape(retString);
var escapedSearch = Regex.Escape(searchText);
string highlightedString = Regex.Replace(escapedBlock, "(" + escapedSearch + ")", Regex.Escape("<span style='background-color: #FFFF00'>") + "$1" + Regex.Escape("</span>"), RegexOptions.IgnoreCase);
return Regex.Unescape(highlightedString);
這需要文本(retString
)塊,並返回基於您傳遞給它(searchText
)參數突出顯示的字符串。我使用反向引用來匹配第一個匹配的組,以確保匹配的大小寫保留在返回的突出顯示的文本中。
這順順當當工作,除了一個場景:一個數字,後一個時期。
.5 - works
5 - works
test - works
5. - broken
當搜索.5
正常工作,尋找6.5
不 - 的Replace
方法似乎並沒有進行匹配的。
我最初的嫌疑人有做逃避任何的反向引用($1
)是值的實際結果的東西,但如果我直接逃離反向引用我最終得到一堆錯誤無效轉義字符。
我在這裏錯過了什麼?
這是因爲您在轉義*輸入*字符串時在點之前添加了一個文字''''。爲什麼要逃避?我認爲你需要刪除'var escapedBlock = Regex.Escape(retString);'並且在'retString'上應用正則表達式替換,並返回'highlightedString'而不需要消除。 –
大量逃避那裏。當使用_literal_作爲正則表達式時,您只需要轉義字面值。在這種情況下,'escapedSearch'。不要做任何其他的逃跑。 – sln