ruby - [\s\S]* 有什么区别?和 。*?

标签 ruby regex

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

如果我没有理解错的话,字符类的意思是“匹配一个空白字符或一个非空白字符”。因此,这不会做与 .* 完全相同的事情吗?

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

是否有任何其他理由使用 [\s\S]*? 而不是 .*?

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

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

最佳答案

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

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

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

关于ruby - [\s\S]* 有什么区别?和 。*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168826/

相关文章:

javascript - Rails 渲染 js 文件但无法执行

java - 如何在 Java 中执行两个命名正则表达式字符类的交集?

java - PatternSyntaxException 尝试按 },{ 拆分时出现

javascript - 正则表达式需要包含加号

java - java中如何查找并获取字符串内的多个子字符串,以及是否需要正则表达式

ruby - 如何解决 Puppet 的编码问题

Ruby 定义了吗?( 42[0][ :foo] ) && defined? ( 93[0] ["bar"] ) == true。为什么?

javascript - 正则表达式 HTML 或 PHP

ruby-on-rails - 在 Ubuntu 9.1 Rails 开发箱中配置 Postgres 以进行 Cucumber 测试

Ruby - 合并具有相同 SKU 的 CSV 重复列