$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!";
我正在解析一个 XML 文档。如果描述中没有换行符,则上述正则表达式有效,但即使有换行符,我如何使其工作?
手册页“模式修饰符”可能会让您感兴趣,尤其是s ( PCRE_DOTALL
) 修饰符:
如果设置了此修饰符,则模式中的点元字符匹配所有字符,包括换行符。没有它,换行符被排除在外。这个修饰符等价于 Perl 的 /s 修饰符。诸如 [^a] 之类的否定类始终匹配换行符,与此修饰符的设置无关。
你的正则表达式会变成这样:
$regpattern4 = "!<media:description type='plain'> (.*) <\/media:description>!s";
注意我s
在结束分隔符之后添加了 ' ' 修饰符。
为什么要使用正则表达式来解析 xml?为什么不使用 simplexml_load_string 来加载 XML 文档并“遍历”它。除非您希望进行简单的替换,否则它将比复杂的正则表达式语句更不容易出错。
尝试
preg_match("/pattern/s", $text)
您需要添加s
(DOTALL) 修饰符:
$regpattern4 = "!(.*)<\/media:description>!s";