我正在尝试在 PHP 中编写一个正则表达式,它允许我在另一个 HTML 标记的实例之前捕获 HTML 标记的最后一个实例。
例如,如果我有以下 HTML:
<p>Para #1</p><p><a href="/path/to/keyword-here/21">Link Here</a> Para #2</p><p>Para #3</p>
我想捕获以下内容,并为keyword-here
and捕获组21
:
<p><a href="/path/to/keyword-here/21">Link Here</a> Para #2</p>
我尝试使用以下正则表达式,但它最终得到了从<p>Para #1
到</p>
after的所有内容Para #2
,这太多了:
'#<p.*?<a .*?(keyword-here)/(\d+).*?</a>.*?</p>#'
因为那不起作用,所以我尝试如下添加一个否定的前瞻,但这会导致根本不返回任何匹配项:
'#<p(?!.*<p).*?<a .*?(keyword-here)/(\d+).*?</a>.*?</p>#'
所以现在我被困住了。第一个正则表达式捕获太多,第二个限制太多,根本不匹配任何东西。中间的平衡在哪里得到我所追求的?
我错过了什么?我是否以错误的方式接近或完全接近这个?谢谢你。