我无法弄清楚为什么这不会停在我认为应该停留的地方。
以下是示例字符串。
<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);
它可以工作,但一次只能获得一次分组而不是一次。我在这里错过了一些简单的东西吗?
谢谢。
答案 0 :(得分:4)
尝试:
<div class="blah">.*?</span></div>
.*
贪婪地匹配,因此在匹配其余的正则表达式之前,它将尽可能地封装在.*
内。 .*?
不情愿地匹配,因此在继续使用正则表达式的其余部分之前,它会尽可能少地匹配。
答案 1 :(得分:1)
另一个解决方案是使用U
(PCRE_UNGREEDY
)选项,默认情况下所有搜索都是不正确的:
preg_match('@<div class="blah">.*</span></div>@U', $page, $matches);