我只是偶然發現了PostgreSQL函數的一個好奇的行爲regexp_replace
。它看起來像一個錯誤,但我總是首先懷疑自己。當我運行在regexp_replace中看似不正確的正則表達式評估
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\ \\1', 'g')
它正確的前綴或者與反斜槓+空格下劃線或百分比,併產生「1\ %2\ _3
」。然而,當我除去空間(它不必是空間,可以是任何字符)
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\\\1', 'g')
它停止使用,以代替所捕獲括號表達式,併產生「1\12\13
」而不是「1\%2\_3
」。如果有人能告訴我我做錯了什麼,我將不勝感激。我只需要在字符串中的某些字符之前添加反斜槓。
更新:我可以通過運行
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\\\\\1', 'g')
我原來的例子,以達到預期的行爲仍似乎有點不合邏輯,不符。不一致之處在於使用相同的E'...'
語法反斜槓可能會產生不同的結果。
謝謝Barmar我剛剛在幾次實驗後發現了這個問題 –