2009-06-17 169 views
0

我有这样的正则表达式在PHP之间的匹配换行符:正则表达式,标签

preg_match('/\[summary\](.+)\[\/summary\]/i', $data['text'], $match); 

它正常工作时,总结标签之间的文本是在一行上。但是,当它包含换行符时,它不匹配。

我试过在这里找到一个正确的修饰符:http://nl2.php.net/manual/en/reference.pcre.pattern.modifiers.php 但是唯一与换行符有关的是“m”,那不符合我的要求。

如何使这项工作?

+2

请注意,您的正则表达式将匹配[summary],然后匹配字符串的末尾,然后回溯直到找到[/ summary]。你可能想要的是在[summary]之后的第一个[/ summary]之后停止匹配。最简单的方法是使用非贪婪量词:(。+?) – Blixt 2009-06-17 10:40:34

+0

只有一组summarry标记,它只能由管理员编写,所以在这里并不重要。谢谢你的提示。 – 2009-06-17 11:52:57

回答

2

您链接到的手册页描述了对处理换行符有影响的另一个选项。

s(PCRE_DOTALL) 如果设置了此修饰符,则 模式中的点字符与所有字符匹配,包括换行符。没有它,换行符被排除在外。这个修饰符相当于Perl的/ s修饰符。否定类如[^ a]总是匹配换行符,与此修饰符的设置无关。