我想从包含html内容的字符串中提取第一次出现的(<a>
和<span>
标记之间的文本)。
我的模式如下:
$pattern='/<a[^(span)][\/\(\)-:@!%*>#=_|?$&";.\w\s]+<\/a> <span/um';
我在<a
的第一次出现和<span
的最后一次出现之间得到文本输出,而不是第一次出现之间的文本。
例如,html内容:
<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span>blah
想要:
<a href="#">asdasdasd</a> <span
获得:
<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span
答案 0 :(得分:1)
'/<a[^(span)][\/\(\)-:@!%*>#=_|?$&";.\w\s]+?<\/a> <span/um';
答案 1 :(得分:0)
你需要让正则表达式变得懒惰而不是贪婪,告诉它尽可能地将<a
和<span
之间的字符与.+?
匹配:
$ptn = '/<a.+?<span/';
$str = '<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span>blah';
preg_match($ptn, $str, $matches);
echo $matches[0];
结果为<a href=\"#\">asdasdasd</a> <span