正则表达式:获取从特定的XML元素
问题描述:
某些XML属性我有以下格式的文档:正则表达式:获取从特定的XML元素
<scheme attr1="lorem" attr2="ipsum" global-test="text goes here" global-attr2="second text goes here">
</scheme>
我想用正则表达式来提取所有匹配global-(.*)
的属性。 它也只能匹配“scheme”元素,因此使用简单的正则表达式(如(global-([^=]*)="([^"]*)")+
)不是一个选项。我试过以下的正则表达式:
<scheme.*([\s]+global-([^=]*)="([^"]*)")+
但这只会匹配“全球attR2位”,并看到其他全局属性为*选择的一部分。使*选择器开启。*懒惰似乎也没有帮助。
而且我知道使用正则表达式从XML文档获取数据不是一个好习惯,但是这个脚本是针对预处理器的。它在解析它之前修改XML。
答
A preg_match_all将匹配所有内容并存储所有内容。因此,首先对“<方案”匹配,如果匹配,然后运行preg_match_all
对阵像
/global-(.*?)=(\w+)/
,然后从matches[0]
,matches[1]
提取物等
答
我相信(...)+构造不能按照您的预期工作。它会打破你以前的比赛,只保存最后一场比赛,而不是扩大比赛组数组。
尝试匹配(。)*并查看它是否适用于您的PHP设置。
我试图
<scheme(.*?[\s]+global-([^=]*)="([^"]*)")+
,我认为应该工作,如果(...)+表现不同。