什么是Ruby正则表达式中的’?-mix’

只是试图在ruby中调试正则表达式。 当我打印正则表达式的内容时,它?-mix在正则表达式的开头显示?-mix ,即使这些字符不是表达式的一部分。 请参阅以下IRB输出以查看此图示

 irb(main):028:0* EXPR = /^a$/ => /^a$/ irb(main):029:0> EXPR => /^a$/ irb(main):030:0> puts EXPR (?-mix:^a$) => nil 

正如您所看到的,当您使用puts打印出正则表达式的内容时,开头就有?-mix 。 我应该担心吗? 它来自哪里?

mix不是英文单词mix ,它是Regexp的选项。

请参阅Regexp#to_s

返回包含正则表达式及其选项的字符串(使用( ?opts:source )表示法。

在您的示例中, m表示多行模式i表示不区分大小写x表示扩展模式短划线前的选项打开,后面的选项关闭(默认) 。 问题的例子是?-mix ,关闭所有选项。

你可以打开它们:

 puts /^a$/mix # =>(?mix:^a$) 

关于-它是标志的语法。 在破折号之前的那些,以及之后的那些是关闭的。

正如Regexp文档中所述,这是一个内联修饰符,使用(?on-off)语法:

正则表达式的结束分隔符后面可以跟一个或多个单字母选项,后者控制模式的匹配方式。

  • /pat/i – 忽略大小写
  • /pat/m – 将换行视为匹配的字符.
  • /pat/x – 忽略模式中的空格和注释
  • /pat/o – 仅执行#{}插值一次

im,x也可以使用(?on-off)构造应用于子表达式级别,该构造启用选项,并禁用括号括起来的表达式的选项。

因此,在我的情况下,这意味着选项mix关闭,没有打开。