1

顧客からバグが報告され、このコードまで追跡しましたが、何が問題なのかわかりません。

$source = "This is a test.\n\n-- a <span style='color:red'>red word</span>!\n\n- a red word!\n\n";
//$find = "- a red word!";  // This one works!
$find = "- a <span style='color:red'>red word</span>!";  // This one doesn't...
$replace = "&bull; a <span style='color:red'>red word</span>!";
$pattern = '/^' . preg_quote($find) . '$/';
$results = preg_replace($pattern, $replace, $source);
die ("Results: " . serialize($results));            

$find動作するサンプルと動作$findしないサンプルを含めました。$findコメントなしが機能しない理由は何ですか?

(注: 実際に HTML を解析しようとしているわけではなく、検索は純粋にサンプルであるため、アプローチの修正は必要ありません)

4

3 に答える 3

2

preg_quote</span>パターンを無効にするスラッシュ文字をエスケープしません。preg_quoteパターンの区切り文字を定義できます。

$pattern = '/^' . preg_quote($find, '/') . '$/';
于 2013-06-30T21:30:35.007 に答える
1

アンカー ( ) を削除する必要があり^ $ます。一致させようとしているのは部分文字列のみであり、すべての文字列ではありません。

$pattern = '~' . preg_quote($find) . '~';
于 2013-06-30T21:28:34.643 に答える