什么是'-混合';在Ruby正则表达式中
只是尝试在ruby中调试正则表达式。当我打印正则表达式的内容时,它会在正则表达式的开头显示什么是'-混合';在Ruby正则表达式中,ruby,regex,Ruby,Regex,只是尝试在ruby中调试正则表达式。当我打印正则表达式的内容时,它会在正则表达式的开头显示?-mix,即使这些字符不是表达式的一部分。请参阅以下IRB输出,以查看此说明 irb(main):028:0* EXPR = /^a$/ => /^a$/ irb(main):029:0> EXPR => /^a$/ irb(main):030:0> puts EXPR (?-mix:^a$) => nil 如您所见,当您使用put打印正则表达式的内容时,开头有?-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
如您所见,当您使用
put
打印正则表达式的内容时,开头有?-mix
。我应该关心这件事吗?它是从哪里来的 mix
不是英语单词mix,它是Regexp
的选项
见:
返回包含正则表达式及其选项的字符串(使用(?opts:source
)表示法)
在您的示例中,m
表示多行模式,i
表示不区分大小写,而x
表示扩展模式。破折号前的选项是打开的,破折号后的选项是关闭的(默认)。问题的示例,?-mix
,所有选项都是关闭的
您可以像这样打开它们:
puts /^a$/mix
# =>(?mix:^a$)
关于
-
,这是一种标志语法。破折号前的标志是打开的,破折号后的标志是关闭的
如中所述,这是一个内联修饰符,使用(?开-关)
语法:
regexp的结束分隔符后面可以跟一个或多个单字母选项,这些选项控制模式的匹配方式
-忽略大小写/pat/i
-将换行符视为与/pat/m
匹配的字符
-忽略模式中的空白和注释/pat/x
-仅执行一次/pat/o
插值{}
i
、m、
和x
也可以使用(?开-关)
构造应用于子表达式级别,该构造为括号内的表达式启用打开选项,禁用关闭选项
因此,在我的例子中,这意味着选项
m
、i
和x
都是关闭的,没有一个是打开的。太好了,谢谢。m选项可能是我的注册表项出了问题。只需找出答案,将其设置为单行,而不是标题。-
可能值得注意的是,这些选项被关闭了(默认情况下是这样的,但是如果你的正则表达式支持的话,你可以为正则表达式的不同部分打开和关闭它们)。@Shantaram:你知道Ruby的(?m)
和其他正则表达式的(?s)是一样的吗
选项?您希望^
和$
匹配什么?那么如果这些选项在默认情况下处于禁用状态,从而导致?-mix,这是否意味着?m-ix已启用多行?(我将m移动到-)