-
Regexp.compile(string[, option[, code]])
-
Regexp.new(string[, option[, code]])
-
编译string后生成并返回一个正则表达式对象。
若第二参数是Fixnum的话,其值可以任选下列中的若干项
若第二参数并非Fixnum,则被看作是布尔值。若为真(nil,false以外的值)的话,其效果等同于指定了Regexp::IGNORECASE。
若指定了第三参数的话,进行匹配时将使用指定的字符编码而不受$KCODE的影响。字符编码只取决于字符串参数的首字符,这同给$KCODE
赋值时的原则是一致的。
若第一参数是正则表达式的话,将拷贝并返回一个内容相同(但是,上述标识的内容将被清楚)的正则表达式。此时将按照第二、第三参数的要求对复制的正则表达式进行设定。
ruby 1.8 特性:若第一参数为正则表达式,则对其进行复制并返回复制结果。此时将忽略第二、第三参数的规定,但会出现警告。
若正则表达式的编译失败,则引发RegexpError异常。
-
Regexp.escape(string[,kcode])
-
Regexp.quote(string[,kcode])
-
在string中的“特殊字符”前面插入转义字符(反斜线)后返回该字符串,这里的“特殊字符”是指那些在正则表达式中具有特殊意义的字符。此时,以可选参数kcode来设定字符串的字符编码(省略时使用$KCODE
的值)。
指定字符编码的方法与$KCODE相同。
-
Regexp.last_match
-
返回当前范围内的最后一次正则表达式匹配的MatchData对象。调用该方法与调用$~是一样的。
/(.)(.)/ =~ "ab"
p Regexp.last_match # => #<MatchData:0x4599e58>
p Regexp.last_match[0] # => "ab"
p Regexp.last_match[1] # => "a"
p Regexp.last_match[2] # => "b"
p Regexp.last_match[3] # => nil
-
Regexp.last_match([nth]) ((<ruby 1.7 特性>))
-
若整数nth为0,则返回匹配的字符串($&)。除此以外,则返回与第nth个括号相匹配的部分字符串($1,$2,...)。若没有相应的括号或未完成匹配,则返回nil。
/(.)(.)/ =~ "ab"
p Regexp.last_match # => #<MatchData:0x4599e58>
p Regexp.last_match(0) # => "ab"
p Regexp.last_match(1) # => "a"
p Regexp.last_match(2) # => "b"
p Regexp.last_match(3) # => nil
若整个正则表达式都没有成功匹配时,无参数的Regexp.last_match
会返回nil
,因此last_match[1]
就会引发NameError异常。而last_match(1)
却返回nil
。
-
Regexp.union([pattern, ...]) ((<ruby 1.8 特性>)) version 1.8.1 以后
-
用|
将传给参数的pattern连起来之后,以Regexp的形式将其返回。只要与其中的一个pattern相匹配,就意味着与Regexp相匹配。
p Regexp.union(/a/, /b/, /c/) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/
pattern可以是Regexp或String。若是String的话,则意味着要与该字符串本身相匹配,随后该pattern将被纳入Regexp之中。
p Regexp.union("a", "?", "b") # => /a|\?|b/
p Regexp.union(/a/, "*") # => /(?-mix:a)|\*/
若没有任何参数时,则返回一个绝对不会匹配的Regexp。
p Regexp.union() # => /(?!)/
最终返回的Regexp的字符编码与传给参数的Regexp的字符编码相一致。若同时给出了若干个编译过的固定编码Regexp时,这些编码必须一致。若存在不同编码的Regexp时,将引发ArgumentError。
p Regexp.union(/a/e, /b/e) # => /(?-mix:a)|(?-mix:b)/e
p Regexp.union(/a/e, /b/s) # => ArgumentError
若同时存在固定编码Regexp和非固定编码Regexp时,最终返回的Regexp的编码以那个固定编码为准。
p Regexp.union(/a/e, /b/) # => /(?-mix:a)|(?-mix:b)/e
请发表评论