正则表达式:从特定的xml元素中获取某些xml属性

时间:2012-05-16 12:04:01

标签: php regex xml

我有一份文件格式如下:

<scheme attr1="lorem" attr2="ipsum" global-test="text goes here" global-attr2="second text goes here">
</scheme>

我想使用正则表达式来提取与global-(.*)匹配的所有属性。 它也只能匹配“scheme”元素,因此使用像(global-([^=]*)="([^"]*)")+这样的简单正则表达式不是一个选项。我尝试了以下正则表达式:

<scheme.*([\s]+global-([^=]*)="([^"]*)")+

但这只会匹配“global-attr2”,并会将其他全局属性视为。*选择器的一部分。将*选择器设置为。* lazy似乎也没有帮助。

我知道从正常表达式的XML文档中获取数据不是一个好习惯,但这个脚本适用于预处理器。它在解析之前修改XML。

2 个答案:

答案 0 :(得分:0)

我相信(...)+构造不能像你期望的那样工作。它会破坏你之前的匹配,只保存最后一个匹配,而不是扩展匹配组数组。

尝试将某些内容与(。)*匹配,看看你的php设置是否正确。

我试过

<scheme(.*?[\s]+global-([^=]*)="([^"]*)")+

如果(...)+行为不同,我认为应该有效。

答案 1 :(得分:0)

preg_match_all将匹配所有内容并存储所有内容。首先匹配“&lt; scheme”,如果匹配,则运行preg_match_all匹配类似

/global-(.*?)=(\w+)/

然后从matches[0]matches[1]等提取