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

Rup*_*ott 8 ruby regex

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

如果我理解正确,则字符类意味着"匹配空白字符或非空白字符".因此,这不会做到完全相同的事情.*?

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

有没有其他理由可以[\s\S]*?代替使用.*?

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

/
  \A \s* (
    (\/\* ([\s\S]*?) \*\/) |
    (\#\#\# ([\s\S]*?) \#\#\#) |
    (\/\/ ([^\n]*) \n?)+ |
    (\# ([^\n]*) \n?)+
  )
/mx
Run Code Online (Sandbox Code Playgroud)

mar*_*ear 6

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

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

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

  • 这可能是正确的答案.但是,ruby有一个用于此目的的符号:`(?m:.)`.这会将`.`置于`m`模式而不会使整个正则表达式处于`m`模式.使用原始正则表达式的人没有做好编码. (6认同)