正则表达式:获取带前缀的递归括号

时间:2018-11-30 15:48:31

标签: php regex string

请问,使用正则表达式模式从$result获取$string的正确php代码是什么?

$string = 'xmlns(ns=http://testurl.com/now)xpointer(//section/datePublished/text())';
preg_match($regex, $string, $result);

输出:

$result = array(
    'xmlns' => 'ns=http://testurl.com/now',
    'xpointer' => '//section/datePublished/text()'
);

方括号可以是递归的(如text())。

1 个答案:

答案 0 :(得分:0)

使用/(\w+)\((.*?)\)(?=\w+\(|$)/正则表达式模式,该模式匹配括号前的任何字符串和()中的任何字符串。

preg_match_all("/(\w+)\((.*?)\)(?=\w+\(|$)/", $string, $m);
$result = array_combine($m[1], $m[2]);

demo中查看结果