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}

        )
)

あなたは貪欲があまりにも貪欲であることがわかります、そしてそれは2番目のインスタンスの終わりまでずっと行きます。私が期待しているのはこれです:

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 に答える