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>).)*

例如,仅匹配一个div并在包含任何内容后停止/跳过</div>

或者,长度约束可能是一种解决方法:

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