php - 正则表达式:获取带前缀的递归括号
问题描述
请问,使用正则表达式模式的正确 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()
)。
解决方案
使用/(\w+)\((.*?)\)(?=\w+\(|$)/
匹配括号前的任何字符串和括号()
后的字符串的正则表达式模式。
preg_match_all("/(\w+)\((.*?)\)(?=\w+\(|$)/", $string, $m);
$result = array_combine($m[1], $m[2]);
在演示中检查结果
推荐阅读
- python - 如何添加到函数内部的变量?
- regex - 检查字符串是否与 Unix 中的正则表达式匹配
- rust - “从我们的对等方收到致命警报消息” Cargo 构建上的 SSL 错误
- google-apps-script - Google Apps 脚本正则表达式返回 null(数据抓取)(谷歌表格)
- azure - 无法使用管理 API 获取虚拟机的内存使用情况
- xml - 使用 XPATH 选择两个处理指令之间的所有文本节点
- python - 如何将数据框转换为宽格式?
- wordpress - 如何在 Wordpress DB 中解码预订日期
- css - 使用css在pdf中显示页面计数器
- javascript - Quill.js 链接格式是如何实现的?