[\ s \ S] *之间有什么区别?和。*?

时间:2011-05-29 16:14:57

标签: ruby regex

我在正则表达式中遇到以下标记:[\s\S]*?

如果我理解正确,字符类意味着“匹配空白字符或非空白字符”。因此,这与.*?

完全不同

一个可能的区别是,.通常与换行符不匹配。但是,这个正则表达式是用Ruby编写的,并且传递了m modifier,这意味着.实际上与新行匹配。

使用[\s\S]*?代替.*?

是否还有其他原因

如果它有帮助,我正在查看的正则表达式出现在第97行的HEADER_PATTERN常量中的sprockets library内。完整的表达式是:

/
  \A \s* (
    (\/\* ([\s\S]*?) \*\/) |
    (\#\#\# ([\s\S]*?) \#\#\#) |
    (\/\/ ([^\n]*) \n?)+ |
    (\# ([^\n]*) \n?)+
  )
/mx

3 个答案:

答案 0 :(得分:6)

您正确解释了正则表达式。

这似乎是来自其他语言的遗留物,它们不支持m-flag(或其他实现中的s-flag)。

使用该构造的一个原因是不使用m-flag,因此您可以使用。没有匹配换行符,但如果需要,仍然可以匹配所有内容。

答案 1 :(得分:0)

使用m标志,除了.*更清晰,更容易维护之外,它们将是相同的。

答案 2 :(得分:0)

换行符是唯一的区别。也许有人认为在不必了解m上下文的情况下阅读更容易,或者希望它能够在更改上下文时保持健壮。

我看到[^]*用于类似目的。