正则表达式不适用于多行

时间:2009-09-18 19:19:58

标签: php regex multiline

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

我正在解析XML文档。如果描述中没有换行符,上面的正则表达式可以工作,但是即使有换行符,如何让它工作呢?

4 个答案:

答案 0 :(得分:4)

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

  

如果设置了此修改器,一个点   模式中的元字符匹配   所有字符,包括换行符。   没有它,排除了换行符。   这个修饰符相当于Perl   / s修饰符。一个负面的类,如   [^ a]始终匹配换行符   字符,与设置无关   这个修饰语。

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

尝试

 preg_match("/pattern/s", $text)

答案 3 :(得分:0)

您需要添加s (DOTALL) modifier

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