正则表达式 - php正则匹配内容?
本文介绍了正则表达式 - php正则匹配内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
$s= <span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>
aaa
<span class="atwho-inserted" data-atwho-at-query="#">#牢骚</span>
bbb
<span class="atwho-inserted" data-atwho-at-query="#">#test</span>
ccc
想要匹配出
<span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>
<span class="atwho-inserted" data-atwho-at-query="#">#牢骚</span>
<span class="atwho-inserted" data-atwho-at-query="#">#test</span>
这种标签,
于是用:
preg_match_all("/<span class=\"atwho-inserted\" .*>#[a-zA-Z0-9\x{4e00}-\x{9fa5}]+<\\/span>/u", $s, $catspan);
匹配出的$catspan是
Array ( [0] =>
Array (
[0] => <span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>
aaa <span class="atwho-inserted" data-atwho-at-query="#">#牢骚</span>
bbb <span class="atwho-inserted" data-atwho-at-query="#">#test</span>
)
)
接下来该怎么办?
解决方案
preg_match_all("/<span class="atwho-inserted" .*
>#[a-zA-Z0-9x{4e00}-x{9fa5}]+<\/span>/u", $s, $catspan);
问题在这个.*
上,正则默认是贪婪匹配,而.
本身就代表所有字符,自然包括>
在内,所以就把后面的内容都匹配进去了。
通过修改为.*?
可以实现非贪婪匹配,这样就能正确结束于>
上,获得你想要的结果。
这篇关于正则表达式 - php正则匹配内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文