【发布时间】:2013-11-07 23:17:16
【问题描述】:
我想使用 PHP 的正则表达式解析并获得一个二维矩阵。但我真的不知道解析并得到一个数组(一维)。例如,我有这个字符串:
$str = {a}&{b}&{c}&{d&};
我想像这样转换为数组:
array( 'a', 'b', 'c', 'd&' )
模式应该是这样的:
$pattern = '#(({[^}]+})(?:&(?1))*#';
模式匹配正确,但我无法使用 $matches 参数获取所有元素:
preg_match_all( $pattern, $str, $matches );
print_r( $matches );
输出:
Array
(
[0] => Array
(
[0] => {a}&{b}&{c}&{d&}
)
[1] => Array
(
[0] => a
)
)
我尝试解决这个涉及带括号的递归模式的问题。
$pattern = '#(({[^}]+})(?:&((?1)))*#';
输出:
Array
(
[0] => Array
(
[0] => {a}&{b}&{c}&{d&}
)
[1] => Array
(
[0] => a
)
[2] => Array
(
[0] => d&
)
)
只获取数组的最后一个元素。选项标志 PREG_PATTERN_ORDER 或 con PREG_SET_ORDER 并没有解决我的问题。
有没有办法获取元素数组?
问候和感谢!
【问题讨论】:
-
只要使用here这样使用过的模式
\{((?:[^{}]|(?R))*)\},它甚至会匹配嵌套的{}:D
标签: php regex arrays preg-match-all