0

私はこのテキストを持っています:

以前のコンテンツ

[row marginTop="10" marginBottom="10"]

[column_3]

[column][article id="12" /][/column]

[column][article id="13" /][/column]

[column][article id="14" /][/column]

[/column_3]

[/row]

そして私がこれをするとき:

$ pattern ='/ ^(\ [([a-zA-Z0-9] [a-zA-Z0-9 _] + [a-zA-Z0-9])*([a-zA-Z] +( ="[^"。]*")?)*(* \ /)?\])$ /';
preg_match($ pattern、$ text、$ matches、PREG_OFFSET_CAPTURE);

print_r($ matches);

結果は次のとおりです。

配列
((
    [0]=>配列
        ((
            [0] => [row marginTop = "10" marginBottom = "10"]
            [1] => 137
        )。

    [1]=>配列
        ((
            [0] => marginBottom = "10"
            [1] => 156
        )。

    [2]=>配列
        ((
            [0] => = "10"
            [1] => 166
        )。

)。

なんで?そして、これを回避するために私は何ができますか?

4

1 に答える 1

2

サブパターン表記(...)は、グループ化とキャプチャの2つの目的を果たします。したがって$matches、すべてのサブパターンのコンテンツだけでなく、全体としての一致になります。

それが必要ない場合は、グループ化に必要のない括弧を削除できます。キャプチャせずにグループ化する必要がある場合は、キャプチャしないサブパターン表記を使用でき(?:...)ます。

$pattern = '/^\[[a-zA-Z0-9][a-zA-Z0-9_]+[a-zA-Z0-9] *(?: [a-zA-Z]+(?:="[^".]*")?)*(?: *\/)?\]$/';

(詳細については、PHPマニュアルの「サブパターン」を参照してください。)

于 2013-02-07T22:22:29.053 に答える