我有一個通用的例程,用於將短代碼(以「^」字符開頭)替換爲特定於性別的選項。我被要求擴展這個以糾正一些常見的拼寫錯誤。這些詞在開始時不會有特殊的字符。如何匹配包含特殊字符的正則表達式模式?
到目前爲止,我一直在使用PHP的str_replace
函數,但由於某些單詞出現在其他單詞中的可能性,我需要確保代碼在匹配時使用單詞邊界。我現在試圖使用preg_replace
。
雖然實際的代碼是從數據庫表中獲取數據,包括性別特定的替換,但我可以用更簡單的代碼重現問題以便提出此問題。
考慮具有$search => $replace
結構下面的數組:
$subs = array("^Heshe" => "He",
"apples" => "bananas");
我然後通過陣列要循環到替換標記:
$message = "^Heshe likes apples but not crabapples.";
foreach ($subs as $search => $replace)
{
$pattern = '/\b' . preg_quote($search, '/') . '\b/u';
$message = preg_replace($pattern, $replace, $message);
}
echo $message;
我期望該消息將被顯示He likes bananas but not crabapples.
,而是我收到消息^Heshe likes bananas but not crabapples.
我也試過$pattern = '/\b\Q' . $search . '\E\b/u'
,還帶有t他同樣的結果。
不幸的是,「^」字符是一些遺留系統的一部分,改變它是不可行的。我如何獲得正則表達式?
謝謝!您的第一個選項似乎按預期工作。然而,你的第二個並不能取代這個字符串中的最後一個「蘋果」:'$ message =「^ Heshe喜歡蘋果,但不喜歡海棠,他喜歡蘋果。 – Philip
是的。我的首選也是第一個**負面預測**正則表達式。 – anubhava