Preg匹配所有贪婪的字符串异常

时间:2010-09-03 19:23:44

标签: php regex preg-match-all regex-greedy

我的源代码是:

{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}

        )
)

2 个答案:

答案 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

相关问题