Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是'-混合';在Ruby正则表达式中_Ruby_Regex - Fatal编程技术网

什么是'-混合';在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。

只是尝试在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
不是英语单词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移动到-)