<trans-unit id="8">
<source>Special settings for:</source>
<target>Special settings for:</target>
</trans-unit>
我正在尝试获取目标标记的ID和内容。在我试图解析的XML中,上述结构重复了很多次。
我目前正在使用下面的表达式,但它不返回任何空数组:
preg_match_all('#<trans-unit id="(.*)">(.*)<target>(.*)</target>(.*)</trans-unit>#Ui', $xml, $matches);
答案 0 :(得分:4)
改为使用xml解析器。
$xml = simplexml_load_string($string);
print_r($xml);
答案 1 :(得分:1)
您可以使用/ s模式修饰符使点(。*)匹配包括换行符在内的所有字符。默认情况下,PCRE将字符串视为长整行字符串。
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
所以在上面的例子中:
preg_match_all('#<trans-unit id="(.*)">(.*)<target>(.*)</target>(.*)</trans-unit>#Uis', $xml, $matches);
答案 2 :(得分:0)
您必须在PHP中为正则表达式指定s
选项才能添加多行匹配功能(即.
也会匹配换行符。)
修改:将m
选项更改为s
以获取更多参考,请参阅下面的评论。