0

我想从包含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
4

2 回答 2

1
  1. 使用 HTML 解析器解析 HTML
  2. 使用惰性量词'/<a[^(span)][\/\(\)-:@!%*>#=_|?$&";.\w\s]+?<\/a> <span/um';
于 2012-10-21T00:06:50.483 回答
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

于 2012-10-21T00:15:35.433 回答