PHP中的正则表达式中的[\s\S]*
是什么意思? [\s\S]*
实际上是否匹配与.*
相同的每个字符串?
答案 0 :(得分:46)
默认情况下.
与新行不匹配 - [\s\S]
是针对该问题的黑客攻击。
这在JavaScript中很常见,但在PHP中,您可以使用/s
标志使点匹配所有字符。
答案 1 :(得分:17)
.
元字符匹配除换行符之外的任何字符。因此,如果您必须匹配换行符,那么用于匹配任何内容的模式.*
将无效。
preg_match('/^.*$/',"hello\nworld"); // returns 0
[\s\S]
这是一个空白字符和非空白字符的字符类,匹配包含换行符的任何字符,[\d\D]
,[\w\W]
也是如此。所以你的模式[\s\S]*
现在匹配任何东西。
preg_match('/^[\s\S]$/s',"hello\nworld"); // returns 1
使.
匹配任何内容(包括换行符)的替代方法是使用s
修饰符。
preg_match('/^.*$/s',"hello\nworld"); // returns 1
使用s
修饰符的替代方法是将其整合为:
preg_match('/^(?s).*(?-s)$/',"hello\nworld"); // returns 1
(?s)
启用s
模式,(?-s)
关闭。关闭后,任何后续.
都不会与换行符匹配。
答案 2 :(得分:2)
[\s\S]
与任何字符匹配的字符集,包括换行符。
.
匹配除换行符之外的任何字符。