0

次のパターン「[link:activate/$id/$test_code]」を含む文字列があります。パターン [link.....] が発生した場合、これから単語 activate、$id、および $test_code を取得する必要があります。

また、グループ化を使用して内部アイテムを取得しようとしましたが、アクティブになるだけで、$test_code は $id を取得できませんでした。配列内のすべてのパラメーターとアクション名を取得するのを手伝ってください。

以下は私のコードと出力です

コード

function match_test()
{
    $string  =  "Sample string contains [link:activate/\$id/\$test_code] again [link:anotheraction/\$key/\$second_param]]] also how the other ationc like [link:action] works";
    $pattern = '/\[link:([a-z\_]+)(\/\$[a-z\_]+)+\]/i';
    preg_match_all($pattern,$string,$matches);
    print_r($matches);
}

出力

    Array
    (
        [0] => Array
            (
                [0] => [link:activate/$id/$test_code]
                [1] => [link:anotheraction/$key/$second_param]
            )

        [1] => Array
            (
                [0] => activate
                [1] => anotheraction
            )

        [2] => Array
            (
                [0] => /$test_code
                [1] => /$second_param
            )

    )
4

2 に答える 2

0

これを試して:

$subject = <<<'LOD'
Sample string contains [link:activate/$id/$test_code] again [link:anotheraction/$key/$second_param]]] also how the other ationc like [link:action] works
LOD;
$pattern = '~\[link:([a-z_]+)((?:/\$[a-z_]+)*)]~i';
preg_match_all($pattern, $subject, $matches);
print_r($matches);

分離する必要がある場合は\$id\$test_code代わりにこれを使用できます。

$pattern = '~\[link:([a-z_]+)(/\$[a-z_]+)?(/\$[a-z_]+)?]~i';
于 2013-07-16T08:24:30.827 に答える
0

これはあなたが探しているものですか?

/\[link:([\w\d]+)\/(\$[\w\d]+)\/(\$[\w\d]+)\]/

編集:

また、あなたの表現の問題はこの部分です: (\/\$[a-z\_]+)+

グループを繰り返しましたが、まだ 1 つのグループ宣言であるため、一致は 1 つだけを返します。正規表現は、一致するグループ番号を発明しません(とにかく私が今まで見たことがありません)。

于 2013-07-16T08:18:53.237 に答える