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]
来处理它。要从中吸取的一个重要教训是,并非互联网上的所有信息都是有效的。没有像打印在纸上那样的审查程序,所以有很多不好的信息,不幸的是,我们要从谷壳中筛选小麦。