0

我有一个格式如下的文档:

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

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

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

但这只会匹配“global-attr2”,并将其他全局属性视为 .* 选择器的一部分。在 .* 上设置 * 选择器似乎也无济于事。

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

4

2 回答 2

0

我相信 (...)+ 构造不像您期望的那样工作。它将破坏您以前的匹配项并仅保存最后一个匹配项,而不是扩展匹配组数组。

尝试对 (.)* 进行匹配,看看它是否适用于您的 php 设置。

我试过

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

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

于 2012-05-16T23:24:41.987 回答
0

preg_match_all将匹配所有内容并存储所有内容。所以首先匹配“<scheme”,如果匹配,然后运行preg_match_all匹配类似的东西

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

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

于 2012-05-16T23:42:48.603 回答