各种Regexp选项

时间:2014-04-26 14:30:02

标签: ruby regex literals

Ruby的正则表达式文字可以采用已记录的选项imx。但除此之外,它还可以接受更多种类的选择。以下是似乎允许的选项清单:

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

如果有文档,请链接到该文档。

2 个答案:

答案 0 :(得分:4)

正则表达式修饰符:

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

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.

source

注意:上述说明有附带条件。请参阅sawa的答案。

答案 1 :(得分:2)

我找到了一些纠正和补充guido的答案。

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

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

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