2
$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!";

我正在解析一个 XML 文档。如果描述中没有换行符,则上述正则表达式有效,但即使有换行符,我如何使其工作?

4

4 回答 4

4

手册页“模式修饰符”可能会让您感兴趣,尤其是s ( PCRE_DOTALL) 修饰符:

如果设置了此修饰符,则模式中的点元字符匹配所有字符,包括换行符。没有它,换行符被排除在外。这个修饰符等价于 Perl 的 /s 修饰符。诸如 [^a] 之类的否定类始终匹配换行符,与此修饰符的设置无关。

你的正则表达式会变成这样:

$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!s";

注意我s在结束分隔符之后添加了 ' ' 修饰符。

于 2009-09-18T19:22:51.930 回答
1

为什么要使用正则表达式来解析 xml?为什么不使用 simplexml_load_string 来加载 XML 文档并“遍历”它。除非您希望进行简单的替换,否则它将比复杂的正则表达式语句更不容易出错。

于 2009-09-18T20:18:19.453 回答
0

尝试

 preg_match("/pattern/s", $text)
于 2009-09-18T19:21:16.397 回答
0

您需要添加s(DOTALL) 修饰符

$regpattern4 = "!(.*)<\/media:description>!s";
于 2009-09-18T19:21:19.610 回答