1

私は次の正規表現を持っています:

preg_match('/some text \d ([\d\,\s]*[A-Z0-9]\, [A-Za-ząćęłńóśźżĄĆĘŁŃÓŚŹŻ\s]*){0,5}/',$text,$results);

内部にはサブパターンがあります:([\d\,\s]*[A-Z0-9]\, [A-Za-ząćęłńóśźżĄĆĘŁŃÓŚŹŻ\s]*)そして私はそれを0から5回まで一致させたいです。$resultただし、このサブパターンの各一致を配列内の他の一致から分離する必要があります。-どうすればいいですか?

私の結果は次のとおりです(この例では文字列を変更しました):

0 => string 'some text pattern1 pattern2 pattern3 pattern4 pattern5' (length=376)
1 => string 'pattern5' 

したがって、サブパターンに5回一致しますが、最後の1つだけが配列で区切られます...

4

2 に答える 2

2

私の知る限り不可能です。正規表現でパターンを手動で繰り返す必要があります。

于 2012-09-28T11:28:40.723 に答える
2

私はいくつかのステップでそれを行います。

単純化された文字列によると:

$text = "some text pattern1 pattern2 pattern3 pattern4 pattern5";
if (preg_match('/^some text /', $text)) {
    $text = preg_replace('/^some text /', '', $text);
    preg_match_all('/(pattern\d)/', $text, $m);
    print_r($m);
}

出力:

Array
(
    [0] => Array
        (
            [0] => pattern1
            [1] => pattern2
            [2] => pattern3
            [3] => pattern4
            [4] => pattern5
        )

    [1] => Array
        (
            [0] => pattern1
            [1] => pattern2
            [2] => pattern3
            [3] => pattern4
            [4] => pattern5
        )

)
于 2012-09-28T11:54:20.773 に答える