我的源代码是:
{categories group_id="3"}
{category_name}
{/categories}
{categories group_id="4"}
{category_name}
{/categories}
我的正则表达是:
preg_match('/{categories group_id="3"}(.*){\/categories}/s', $tagdata, $matches);
结果是:
Array
(
[0] => Array
(
[0] => {categories group_id="3"}
{category_name}
{/categories}
{categories group_id="4"}
{category_name}
{/categories}
)
[1] => Array
(
[0] =>
{category_name}
{/categories}
{categories group_id="4"}
{category_name}
)
)
你可以看到贪婪太贪婪了,它一直到第二个实例结束。我期待的是:
Array
(
[0] => Array
(
[0] => {categories group_id="3"}
{category_name}
{/categories}
)
[1] => Array
(
[0] =>
{category_name}
)
)
答案 0 :(得分:3)
.* greedy
.*? non-greedy
答案 1 :(得分:0)
同意@ user779
另一种方法是在正则表达式的末尾添加 U(PCRE_UNGREEDY)修饰符,使所有量词变得懒惰。
preg_match('/{categories group_id="3"}(.*){\/categories}/sU', $tagdata, $matches);
此处有更多信息:http://php.net/manual/en/reference.pcre.pattern.modifiers.php