正则表达式:获取从特定的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-([^=]*)="([^"]*)")+ 

,我认为应该工作,如果(...)+表现不同。