0

私はHTMLの大きな塊を持っています。

これとともに:

~<div>(?:.*?)<a[\s]+[^>]*?href[\s]?=[\s"\']+(#_ftnref([0-9]+))["\']+.*?>(?:[^<]+|.*?)?</a>(.*?)</div>~si

私はこれをキャプチャしています:

<div> </div><hr align="left" size="1" width="33%" /><div><p><a title="" href="#_ftnref1">[1]</a> This is not to suggest that there are only two possible arguments to be made in support of  blah blah <em>blah</em>.</p></div>

だが!これ欲しい:

<div><p><a title="" href="#_ftnref1">[1]</a> This is not to suggest that there are only two possible arguments to be made in support of  blah blah <em>blah</em>.</p></div>

手伝ってくれますか?

PS: (?: )とは対照的に( )、テキストのキャプチャを回避するために使用されます。返される$matches配列が、この投稿で言及されていないいくつかの異なる正規表現に対して一貫しているようにしたいので、私は意図的にこれを行っています。

4

1 に答える 1

1

との遅延マッチングが.*?機能しない場合は、除外パターンを考え出す必要があります。

(?:(?!</div>).)*

たとえば、1つだけに一致divし、含まれているものがあると停止/スキップします</div>

または、長さの制約が回避策になる可能性があります。

(?:.{0,20})
于 2013-02-21T03:49:33.853 に答える