我在正则表达式中遇到以下标记:[\s\S]*?
如果我理解正确,字符类意味着“匹配空白字符或非空白字符”。因此,这与.*?
一个可能的区别是,.
通常与换行符不匹配。但是,这个正则表达式是用Ruby编写的,并且传递了m
modifier,这意味着.
实际上与新行匹配。
使用[\s\S]*?
代替.*?
如果它有帮助,我正在查看的正则表达式出现在第97行的HEADER_PATTERN常量中的sprockets library内。完整的表达式是:
/
\A \s* (
(\/\* ([\s\S]*?) \*\/) |
(\#\#\# ([\s\S]*?) \#\#\#) |
(\/\/ ([^\n]*) \n?)+ |
(\# ([^\n]*) \n?)+
)
/mx
答案 0 :(得分:6)
您正确解释了正则表达式。
这似乎是来自其他语言的遗留物,它们不支持m-flag(或其他实现中的s-flag)。
使用该构造的一个原因是不使用m-flag,因此您可以使用。没有匹配换行符,但如果需要,仍然可以匹配所有内容。
答案 1 :(得分:0)
使用m标志,除了.*
更清晰,更容易维护之外,它们将是相同的。
答案 2 :(得分:0)
换行符是唯一的区别。也许有人认为在不必了解m上下文的情况下阅读更容易,或者希望它能够在更改上下文时保持健壮。
我看到[^]*
用于类似目的。