我有一份文件格式如下:
<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。
答案 0 :(得分:0)
我相信(...)+构造不能像你期望的那样工作。它会破坏你之前的匹配,只保存最后一个匹配,而不是扩展匹配组数组。
尝试将某些内容与(。)*匹配,看看你的php设置是否正确。
我试过
<scheme(.*?[\s]+global-([^=]*)="([^"]*)")+
如果(...)+行为不同,我认为应该有效。
答案 1 :(得分:0)
preg_match_all将匹配所有内容并存储所有内容。首先匹配“&lt; scheme”,如果匹配,则运行preg_match_all
匹配类似
/global-(.*?)=(\w+)/
然后从matches[0]
,matches[1]
等提取