我已经找到了很多关于这个话题的stackoverflow questions
。但是对于我的问题,我无法从这些问题中找到解决方案。
我有以下html:
<p><a name="first-title"></a></p>
<h3>First Title</h3>
<h2><a href='#second'>Second Title</a></h2>
<h3>Third Title</h3>
我想找出<h3>
前面的</a></p>
。在这种情况下,输出应为:
<h3>First Title</h3>
所以我实现了以下正则表达式;
preg_match_all('/(?<=<\/a><\/p>)<h3>(.+?)<\/h3>/s',$html,$data);
上述正则表达式无法从上面的 html 输出任何内容。但是如果我从html中删除换行符,则上面的正则表达式可以正确输出我想要的结果。
如果可能,我不想从 html 中删除换行符。我应该如何开发正则表达式来忽略源字符串中的换行符?
请帮助我。
答案 0 :(得分:4)
使用\K
,因为你无法在外观断言中使用qunatifiers。
preg_match_all('/<\/a><\/p>\s*\K<h3>(.+?)<\/h3>/s',$html,$data);
或者只是将\n
char放在lookbehind中。
preg_match_all('/(?<=<\/a><\/p>\n)<h3>(.+?)<\/h3>/s',$html,$data);