首页 > 解决方案 > 正则表达式:获取带前缀的递归括号

问题描述

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

$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())。

标签: phpregexstring

解决方案


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

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

在演示中检查结果


推荐阅读