Ruby [\s\s]*之间有什么区别?还有。*?

Ruby [\s\s]*之间有什么区别?还有。*?,ruby,regex,Ruby,Regex,我在正则表达式中遇到了以下标记:[\s\s]*? 如果我理解正确,character类的意思是“匹配空白字符或非空白字符”。因此,这与*? 一个可能的区别是,通常与换行符不匹配。然而,这个正则表达式是用Ruby编写的,并传递了实际上匹配换行符的含义 使用[\s\s]*?而不是*? 如果有帮助,我正在查看的正则表达式将显示在第97行的In-HEADER_模式常量中。全文如下: / \A \s* ( (\/\* ([\s\S]*?) \*\/) | (\#\#\# ([\s\S]

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

如果我理解正确,character类的意思是“匹配空白字符或非空白字符”。因此,这与
*?

一个可能的区别是,
通常与换行符不匹配。然而,这个正则表达式是用Ruby编写的,并传递了
实际上匹配换行符的含义

使用
[\s\s]*?
而不是
*?

如果有帮助,我正在查看的正则表达式将显示在第97行的In-HEADER_模式常量中。全文如下:

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

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

这似乎是其他不支持m-flag(或其他实现中的s-flag)的语言的残余


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

使用m标志,它们将是相同的,只是
*
将更清晰,更易于维护。

换行符是唯一的区别。也许有人认为它更容易阅读,而不必了解m上下文,或者希望它对该上下文的更改具有鲁棒性


我见过类似用途的
[^]*

这是一个伟大的想法,也是一个可能的用例。这可能是正确的答案。然而,ruby有一个用于此目的的符号:
(?m:)
。这将使
处于
m
模式,而不会使整个正则表达式处于
m
模式。无论谁使用原始正则表达式都不是很好的编码方式。@sawa我同意这两种说法我同意你的猜测。也许,如果你给我们完整的regxp或者它使用的上下文,可能会有所帮助。@sawa这是个好主意,谢谢。我已经编辑了我的问题。谢谢添加正则表达式。现在,它看起来更奇怪,因为它使用的是
m
,并打算使用
[^\n]
来处理它。要从中吸取的一个重要教训是,并非互联网上的所有信息都是有效的。没有像打印在纸上那样的审查程序,所以有很多不好的信息,不幸的是,我们要从谷壳中筛选小麦。