0

我不明白为什么这没有在我认为应该停止的地方停止。

这是示例字符串。

<div class="blah"><a href="www.foo.bar">foo bar</a></div>
<div class="blah2"><span><a href="www.bar.foo">bar foo</a></span></div>

这种分组一遍又一遍地重复,所以我使用以下内容。

preg_match('@<div class="blah">.*</span></div>@', $page, $matches);

它可以工作,但一次获得每个分组,而不是一次一个。我在这里错过了一些简单的东西吗?

谢谢你。

4

2 回答 2

4

尝试:

<div class="blah">.*?</span></div>

.*贪婪地匹配,所以它会.*在匹配正则表达式的其余部分之前尽可能多地封装在其中。 .*?不情愿地匹配,因此在继续匹配正则表达式的其余部分之前,它会尽可能少地匹配。

于 2013-01-30T00:27:59.163 回答
1

另一种解决方案是使用U( PCRE_UNGREEDY) 选项,默认情况下所有搜索都是不贪婪的:

preg_match('@<div class="blah">.*</span></div>@U', $page, $matches);
于 2013-01-30T00:33:38.430 回答