正则表达式没有完全正常工作

时间:2014-09-06 13:09:05

标签: php regex tags

我有一个特殊的标签,我在我的网页中使用。这个标签是这样构成的;

输入: {{ module : menu : params(mainmenu , index) }}

现在我遇到的问题是我的正则表达式没有读取第二个参数,所以我无法访问此参数。

这是我的标签,我遇到{{module:menu:params(mainmenu, index)}}

的问题
$str = 'params(null)';

preg_match_all('{
# matches "null" in " null)"
(?<=\s)[^,]+(?=\))

|

# matches "null" in "(null)"
(?<=\()[^,]+(?=\))

|

# matches "null" in "params(null"
(?<=params\()[^,]+

|    

# matches "true" in ", true" and ""foo"" in ", "foo""
(?<=,\s)[^,]+
}x', $str, $matches);

现在正则表达式开始工作,只给了我一个价值在与params挂钩之间的价值。

PHP让我进入一个数组是:

$array = array
(
[0] => module
[1] => menu
[2] => params(mainmenu, index)
);

正则表达式与params相匹配,因此它为我提供了我在标签中提供的所有参数。

输出 现在只读取第一个参数,它给了我这个结果;

Array
(
[0] => Array
    (
        [0] => mainmenu
    )

)

通缉/预期输出 但我想/需要这个

Array
(
[0] => Array
    (
        [0] => mainmenu
        [1] => index
    )

)

我希望我的解释足够好,如果不是请评论,那么我可以更清楚地说明。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下正则表达式来获取mainmenuindex字符串数组,

(?<=\()[^,]*|[^\) ]+(?=\))

DEMO

代码:

<?php
$data = " {{module:menu:params(mainmenu, index)}}";
$regex =  '~\w+[^,\(]+(?=[^()]*\))~';  // this is the solution that works
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

输出:

Array
(
    [0] => Array
        (
            [0] => mainmenu
            [1] => index
        )

)