Php:如何忽略Regex中的换行符

时间:2015-06-28 16:42:28

标签: php regex

我已经找到了很多关于这个话题的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 中删除换行符。我应该如何开发正则表达式来忽略源字符串中的换行符

请帮助我。

1 个答案:

答案 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);