Ruby 各种Regexp选项

Ruby 各种Regexp选项,ruby,regex,literals,Ruby,Regex,Literals,Ruby的regex-literal可以使用文档中的选项i、m、x。但除此之外,它还可以接受更广泛的选择。以下是似乎允许的选项清单: //e # => // //i # => //i ignore case //m # => //m multiline //n # => //n //o # => // //s # => // //u # => // //x # => //x extended 他们是干什么的?其中一些与编码有关吗?其他人呢

Ruby的regex-literal可以使用文档中的选项
i
m
x
。但除此之外,它还可以接受更广泛的选择。以下是似乎允许的选项清单:

//e # => //
//i # => //i  ignore case
//m # => //m  multiline
//n # => //n
//o # => //
//s # => //
//u # => //
//x # => //x  extended
  • 他们是干什么的?其中一些与编码有关吗?其他人呢
  • 如果它们指示编码,那么当指定多个编码时会发生什么情况
  • 虽然其他选项会引发未知的正则表达式选项错误,但此处列出的选项不会。如果上一个问题的答案是他们什么也不做,那么为什么允许这些特定的选项
  • 为什么检查中反映了
    n
    ,而其他检查没有反映出来?那些检查没有显示差异的人,实际上是不同的吗

如果有文档,请链接到该文档。正则表达式修饰符:

正则表达式文字可能包括一个可选的修饰符,用于控制匹配的各个方面。修饰符在第二个斜杠字符后指定,如前所示,可以由以下字符之一表示:

Modifier    Description
i           Ignore case when matching text.
o           Perform #{} interpolations only once, the first time the regexp literal is evaluated.
x           Ignores whitespace and allows comments in regular expressions
m           Matches multiple lines, recognizing newlines as normal characters
u,e,s,n     Interpret the regexp as Unicode (UTF-8), EUC, SJIS, or ASCII. 
            If none of these modifiers is specified, the regular expression is 
            assumed to use the source encoding.


注意:上述描述有但书。请参见sawa的答案。

我发现guido的答案有一些修正和补充

  • 如果未指定编码,则假定正则表达式使用源编码(如果文件开头没有魔术注释,则为Ruby 2.0中的UTF-8),除非正则表达式仅由单字节字符组成,在这种情况下,正则表达式转换为US-ASCII

  • 如果指定了多个编码选项,则最后一个选项生效

    //eu.encoding # => UTF-8
    //ue.encoding # => EUC
    

我可以添加这个,但另一个我不知道:
o
->只执行一次{…}替换,我们可以说
neus
专门用于编码:
none、EUC、UTF-8、SJIS。不确定EUC和SJI是什么…@HamZa
//n
(编码:无)和
///code>之间的区别是什么?不知道,但guido的回答确实涵盖了这一点。我不确定是什么让你说这些是未记录的。你看过报纸了吗?具体来说,第二点:还不知道;第四点:站在这个文档上,我发现
n
是ASCII,这里是胡乱猜测,你的本地字符集是什么?从文件(没有魔法注释)还是从irb,
/。编码给我
.
。但是我使用Ruby 2.1和
”。编码
会给我
#
,这似乎与您的描述不匹配。此信息已添加到“修饰符”下。由于它是从另一个网站复制的,我复制了那里的信息,感谢这个答案。