我有一个特殊的标签,我在我的网页中使用。这个标签是这样构成的;
输入:
{{ 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
)
)
我希望我的解释足够好,如果不是请评论,那么我可以更清楚地说明。
答案 0 :(得分:1)
您可以尝试以下正则表达式来获取mainmenu
和index
字符串数组,
(?<=\()[^,]*|[^\) ]+(?=\))
代码:
<?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
)
)