我正在使用正则表达式,
/(\<\s*?string(-array)?\s*?.*?\s*?\>\s*?)(.*)(\s*?\<\/string(-array)?\>)/
...匹配表单之间的所有内容或标签:
<string-array name="saveArray">
<item>Téléphone</item>
<item>Carte mémoires</item>
</string-array>
问题是,我只能匹配'string'标签或包含一个项目的数组的内容。当我用[^ s]替换中间捕获组中的点时,我得到了我想要的内容,但是这个解决方案将无法匹配任何包含's'的内容。我在内容('item-matching')组之前的'str'尝试了一个负面的后视,它给了我相同的结果。
任何帮助都会很棒!
答案 0 :(得分:2)
您需要使用SimpleXML来解析XML。在边缘情况下,XML可能会更改或不匹配您的正则表达式 - 因此最好只使用XML解析器。
<?php
$xml '<string-array name="saveArray">'
. '<item>Téléphone</item>'
. '<item>Carte mémoires</item>'
. '</string-array>';
$items = new SimpleXMLElement($xml);
答案 1 :(得分:1)
正如其他人所说的那样不使用正则表达式来解析xml / html。
无论如何,这应该有效:
if ($subject =~ m!<(string-array)[^>]*>(.*?)</\1>!si) {
print $2, "\n";
}
答案 2 :(得分:0)
你 真的 不应该使用regexps解析xml。
那就是说,我认为弄乱你的事情可能是“.
”(在许多正则表达式引擎中,使用默认标志)匹配任何字符除了换行符..所以您的.*
不会匹配多行。尝试将“.*
”替换为“[\w\W]*
”,或添加一个表示“.
”应与所有字符匹配的正则表达式标记。