0

段落を一致させようとしています:

<p>content</p>

単純な<p>(.*?)</p>作業ですが、その段落に別の段落が含まれている場合があるため、最初の段落が終了した後にパターンが一致し、2 番目の段落までは一致しません。

問題を引き起こす段落は次のようになります。

<p><p><b>something</b></p>content</p>

その中の他のpタグを無視してメインの段落を一致させるにはどうすればよいですか?

私は試した

<p>(.*?)(?<!</b>)</p>

しかし、うまくいきませんでした。

preg_match_all php 関数を使用しています。

4

2 に答える 2

3

正規表現は、ネストされたタグを解析するにはひどいものです。そのため、dom または xml パーサーを使用します。

于 2011-02-06T04:18:33.857 に答える
0

このような状況に対処する必要があるときは、次の終了タグのインデックス (例: ) を探す再帰関数findClosingTag</p>を作成しました。そのインデックスの前に別の開始タグ (例: <p>)がある場合は、再帰的に入れ子になった開始タグの近くを探します。元のタグの最後に到達するまで続行します。最も効率的ではないかもしれませんが、完全な DOM を解析する必要がない場合は、おそらくそれよりも優れています。

現在、スニペットを配置していませんが、非常に簡単です。

于 2011-02-06T04:24:06.423 に答える