指定された文字列 (通常は段落) について、いくつかの単語/フレーズを置換したいのですが、何らかの方法でタグで囲まれている場合は無視してください。これも大文字と小文字を区別しない必要があります。
例:
リーリー次の単語を置き換えるとします:
リンク
: 2 回表示されます。 1 つ目はプレーン テキスト (一致)、2 つ目は A
タグ (無視) パブリック プラットフォーム
: プレーン テキスト (一致、大文字と小文字を区別しない)、B
タグの 2 番目 (無視) softpillows
: 1 件のプレーン テキスト一致。 fox
: 1 件のプレーン テキスト一致。完全な単語を表示します。 fruits
: プレーン テキスト (一致)、span
タグの 2 番目 (無視) と他のテキスト 背景として、(個々の単語ではなく) 一致するフレーズを検索し、一致したものを関連ページにリンクしています。
ネストされた HTML (リンク のない 太字の タグ、またはその逆) やその他のエラー (例: the <a href="# ">フレーズ <b>ここに</ a>が入ります</b>
)
HTML コンテンツが削除されたテキストのサニタイズされたコピーを検索するなど、いくつかのことを試しました。一致があることがわかりましたが、それを元のテキストにマッピングし直すというまったく新しい問題に遭遇しました。コンテンツ。
regex の否定先読み についての言及を見つけましたが、考えがまとまらなかった後、この正規表現を入手しました (VALID HTML タグがペアになっていると仮定します)
リーリーデフォルトパラメータを使用した出力例
リーリーこれからステップバイステップです
pillowS
のみがある場合は、pillow
は必要ありません)\w
単語記号、\s
スペース、または\n
改行と を使用して終了することができます。開始タグ付き終了句読点 - この一致は必要ありません。否定的な先読みがあります
(?![\w\n\s>$Punctuation]*? 。ここで、
が記述されたシーケンス (
$excludeOutside
変数) にないため、一致が新しいタグに含まれないことがわかります ($excludeTag
変数は基本的に$excludeOutside
と同じですが、# など、$toReplace
が HTML タグ自体になる場合に適用されます。 ##aこのコードではテキストを または
>>