无法使用正则表达式解析多行

时间:2012-06-22 07:32:44

标签: php

<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);

3 个答案:

答案 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以获取更多参考,请参阅下面的评论。