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

3 回答 3

4

请改用 xml 解析器。

$xml = simplexml_load_string($string);
print_r($xml);
于 2012-06-22T07:36:43.683 回答
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);
于 2012-06-22T07:39:58.060 回答
0

您必须在 PHP 中为您的正则表达式指定s选项以添加多行匹配功能(即.也将匹配换行符)。

编辑:将m选项更改为以s供进一步参考,请参阅下面的评论。

于 2012-06-22T07:36:16.250 回答