我在正则表达式中遇到了以下标记:[\s\S]*?
如果我没有理解错的话,字符类的意思是“匹配一个空白字符或一个非空白字符”。因此,这不会做与 .* 完全相同的事情吗?
一个可能的区别是通常 .
不匹配换行符。然而,这个正则表达式是用 Ruby 编写的,并通过了 m
modifier。这意味着 .
实际上匹配换行符。
是否有任何其他理由使用 [\s\S]*?
而不是 .*?
如果有帮助,我正在查看的正则表达式出现在 sprockets library 中在第 97 行的 HEADER_PATTERN 常量中。完整的表达式是:
/
\A \s* (
(\/\* ([\s\S]*?) \*\/) |
(\#\#\# ([\s\S]*?) \#\#\#) |
(\/\/ ([^\n]*) \n?)+ |
(\# ([^\n]*) \n?)+
)
/mx
最佳答案
您正确解释了正则表达式。
这似乎是其他不支持 m-flag(或其他实现中的 s-flag)的语言的遗留物。
使用该构造的一个原因是不使用 m 标志,因此您可以使用 .不匹配换行符,但如果需要仍然能够匹配所有内容。
关于ruby - [\s\S]* 有什么区别?和 。*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168826/