正则表达式没有停在我认为应该的地方

时间:2013-01-30 00:25:16

标签: php regex

我无法弄清楚为什么这不会停在我认为应该停留的地方。

以下是示例字符串。

<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);

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

谢谢。

2 个答案:

答案 0 :(得分:4)

尝试:

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

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

答案 1 :(得分:1)

另一个解决方案是使用UPCRE_UNGREEDY)选项,默认情况下所有搜索都是不正确的:

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