1

最初の 2 つをスキップして見つかった 3 番目の一致を使用するように preg_match_all に指示する方法はありますか? たとえば、次の HTML があります。

<div class="entry">
    <div class="text">BlaBlaBla</div>
    <div class="date">2009-10-31</div>
</div>

最も外側の div の内容を取得するために preg_match_all が必要であり、遭遇した最初の /div で停止することはありません。

4

3 に答える 3

5

XML/HTML パーサーのようなものを使用すると、はるかに優れたサービスが提供されます。ここを参照してください。

于 2009-10-31T01:12:40.837 に答える
4

これは、正規表現が理論的に処理できない問題のクラスです: 再帰的に定義された構造。拡張 RE はある程度それを行うことができるかもしれませんが、(比喩を混ぜ合わせるために) パントして別のツールを拾う方が良いです。

そうは言っても、PCREには特に再帰パターン機能があり、典型的なデモンストレーションは\((a*|(?R))*\)、バランスのとれた括弧とasの任意の組み合わせを処理できることです。したがって、おそらくそれを適応させることができますが、私がREでやろうとしないことをやろうとしています.

更新:これがどれほど役立つかはわかりませんが、:

php > $t = "<div> how <div> now is the time </div>  now </div>";
php > preg_match('/<div>(.*|(?R))*<\/div>/',$t,$m); print_r($m);
Array
(
    [0] => <div> how <div> now is the time </div>  now </div>
    [1] => 
)
php > 
于 2009-10-31T01:08:40.610 に答える
0

XPathの「軸指定子」「ノードセット関数」を利用できます

于 2009-10-31T02:34:56.927 に答える