0

我的源字符串是这样的:

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

        )
)
4

2 回答 2

3
.*  greedy
.*? non-greedy
于 2010-09-03T19:27:15.460 回答
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

于 2012-11-14T21:05:36.833 回答