検索

ホームページ  >  に質問  >  本文

文字列内のテキストを置換し、HTML タグ内の一致を無視します

指定された文字列 (通常は段落) について、いくつかの単語/フレーズを置換したいのですが、何らかの方法でタグで囲まれている場合は無視してください。これも大文字と小文字を区別しない必要があります。

例:

リーリー

次の単語を置き換えるとします:

背景として、(個々の単語ではなく) 一致するフレーズを検索し、一致したものを関連ページにリンクしています。

ネストされた HTML (リンク のない 太字の タグ、またはその逆) やその他のエラー (例: the <a href="# ">フレーズ <b>ここに</ a>が入ります</b>)

HTML コンテンツが削除されたテキストのサニタイズされたコピーを検索するなど、いくつかのことを試しました。一致があることがわかりましたが、それを元のテキストにマッピングし直すというまったく新しい問題に遭遇しました。コンテンツ。

P粉676821490P粉676821490327日前372

全員に返信(1)返信します

  • P粉594941301

    P粉5949413012024-03-28 12:56:47

    regex の否定先読み についての言及を見つけましたが、考えがまとまらなかった後、この正規表現を入手しました (VALID HTML タグがペアになっていると仮定します)

    リーリー

    デフォルトパラメータを使用した出力例

    リーリー

    これからステップバイステップです

    1. 後続の一致はありません (pillowS のみがある場合は、pillow は必要ありません)
    2. テキストの後に任意の長さの \w 単語記号、\s スペース、または \n 改行と を使用して終了することができます。開始タグ付き 終了句読点 - この一致は必要ありません。否定的な先読みがあります (?![\w\n\s>$Punctuation]*? <\/ )<\/)。ここで、<< が記述されたシーケンス ($excludeOutside 変数) にないため、一致が新しいタグに含まれないことがわかります (
    3. $excludeOutside
    4. 変数) $excludeTag 変数は基本的に $excludeOutside と同じですが、# など、$toReplace が HTML タグ自体になる場合に適用されます。 ##a
    このコードではテキストを << または >>
    で上書きできず、これらの記号を使用すると予期しない動作が発生する可能性があることに注意してください。

    返事
    0
  • キャンセル返事