什么是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
– 仅执行#{}
插值一次
i
,m,
和x
也可以使用(?on-off)
构造应用于子表达式级别,该构造启用选项,并禁用括号括起来的表达式的选项。
因此,在我的情况下,这意味着选项m
, i
和x
关闭,没有打开。