限られた正規表現の経験、私は preg_replace を使用して PHP で作業しています。
[no-glossary] ... [/no-glossary] タグで囲まれていない特定の「単語」を置き換えたい。「単語」とタグの間にスペースがない場合、または「単語」の後にスペースがある場合、私の式は機能しますが、単語の前にスペース (期待) を入れると失敗します!
これらは機能します:
$html = '<p>Do not replace [no-glossary]this[/no-glossary] replace this.</p>';
$html = '<p>Do not replace [no-glossary]this [/no-glossary] replace this.</p>';
これはしません:
$html = '<p>Do not replace [no-glossary] this [/no-glossary] replace this.</p>';
部分的に説明された使用パターン
/ - find
(?<!\[no-glossary\]) - Not after the [no-glossary] tag
[ ]* - Followed by 0 or more spaces (I think this is the problem)
\b(this)\b - The word "this" between word boundaries
[ ]* - Followed by 0 or more spaces
(?!\[\/no-glossary\]) - Not before the [/no-glossary] tag
/
コードは次のとおりです。
$pattern = "/(?<!\[no-glossary\])[ ]*\b(this)\b[ ]*(?!\[\/no-glossary\])/";
$html = '<p>Do not replace [no-glossary] this [/no-glossary] replace this.</p>';
$html = preg_replace($pattern, "that", $html);
print $html;
出力:
<p>Do not change [no-glossary] that [/no-glossary] changethat.</p>
問題:
- タグ間で単語が変更されました。
- 正しく置換された 2 番目の単語の前にあるスペースが削除されました。