Preg_match_all模式除外

时间:2014-07-03 12:07:36

标签: php regex preg-match preg-match-all

我试图从文本字段中获取特定标记的所有内容,并仅检索其部分内容

<h4>
TEXT TO RETRIEVE HERE
<br>
EVERYTHING ELSE
</h4>

我遇到的问题是并非在每种情况下都会显示BR标记,所以当它出现时,我想排除它+后面的所有内容

<br>
EVERYTHING ELSE

我尝试了以下preg_match_all,但没有运气:

preg_match_all('/<h4>(.*?)<br>.*<\/h4>/ims', $text, $match)

2 个答案:

答案 0 :(得分:1)

尝试:

<h4>.*?(?=<br>|$)

with&#34; dot匹配换行符&#34;并且^ $不匹配启用换行符选项

如果您需要确保最后存在结束标记,您可以尝试:

<h4>.*?(?=(?:<br>.*</h4>)|(?:</h4>))

答案 1 :(得分:0)

我认为你需要这样的东西,

<h4>((?:(?!<br>).)*)(?=<br>|<\/h4>)

它捕获<h4>标记之后的值<br>零次或多次。并且必须后跟<br>代码或</h4>代码。

DEMO