Php 正则表达式,匹配标记之间的换行符

Php 正则表达式,匹配标记之间的换行符,php,regex,Php,Regex,我有一个PHP正则表达式: preg_match('/\[summary\](.+)\[\/summary\]/i', $data['text'], $match); 当摘要标记之间的文本在一行上时,它可以正常工作。但是,当它包含换行符时,它不匹配 我尝试在此处找到正确的修饰符: 但是,与新词相关的唯一一个词是“m”,这并不是我想要的 如何做到这一点?您链接到的手册页描述了另一个影响换行处理方式的选项。s(PCRE_DOTALL) 如果设置了此修改器,则图案中的点元字符将匹配所有字符,包括换行

我有一个PHP正则表达式:

preg_match('/\[summary\](.+)\[\/summary\]/i', $data['text'], $match);
当摘要标记之间的文本在一行上时,它可以正常工作。但是,当它包含换行符时,它不匹配

我尝试在此处找到正确的修饰符: 但是,与新词相关的唯一一个词是“m”,这并不是我想要的


如何做到这一点?

您链接到的手册页描述了另一个影响换行处理方式的选项。s(PCRE_DOTALL)
如果设置了此修改器,则图案中的点元字符将匹配所有字符,包括换行符。没有它,新行被排除在外。此修饰符相当于Perl的/s修饰符。像[^A]这样的负数类始终与换行符匹配,与此修饰符的设置无关

正则表达式在解析HTML方面根本不好(请参阅原因)。您需要的是一个HTML解析器。有关使用各种解析器的示例,请参见


您可能会发现这很有用。

请注意,正则表达式将匹配[summary],然后匹配字符串的结尾,然后回溯,直到找到[/summary]。您可能希望它在[summary]之后的第一个[/summary]之后停止匹配。最简单的方法是使用一个非贪婪的量词:(.+?)只有一组summarry标记,并且它只由管理员编写,所以在这里并不重要。谢谢你的提示。