在PHP中的正则表达式中,[\ S \ s] *意味着什么?

时间:2010-12-28 08:17:25

标签: php regex

PHP中的正则表达式中的[\s\S]*是什么意思? [\s\S]*实际上是否匹配与.*相同的每个字符串?

3 个答案:

答案 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]与任何字符匹配的字符集,包括换行符。

.匹配除换行符之外的任何字符。