正則表達式的類。正則表達式的字面值是以雙斜線內夾表達式的形式生成的。html
/^this is regexp/
還可使用Regexp.new(string)
來動態地生成正則表達式對象。正則表達式
Regexp.compile(string[, option[, code]])
Regexp.new(string[, option[, code]])
編譯string後生成並返回一個正則表達式對象。ruby
若第二參數是Fixnum的話,其值能夠任選下列中的若干項ui
若第二參數並不是Fixnum,則被看做是布爾值。若爲真(nil,false之外的值)的話,其效果等同於指定了Regexp::IGNORECASE。this
若指定了第三參數的話,進行匹配時將使用指定的字符編碼而不受$KCODE的影響。字符編碼只取決於字符串參數的首字符,這同給$KCODE
賦值時的原則是一致的。編碼
若第一參數是正則表達式的話,將拷貝並返回一個內容相同(可是,上述標識的內容將被清楚)的正則表達式。此時將按照第2、第三參數的要求對複製的正則表達式進行設定。spa
ruby 1.8 特性:若第一參數爲正則表達式,則對其進行復制並返回複製結果。此時將忽略第2、第三參數的規定,但會出現警告。3d
若正則表達式的編譯失敗,則引起RegexpError異常。code
Regexp.escape(string[,kcode])
Regexp.quote(string[,kcode])
在string中的「特殊字符」前面插入轉義字符(反斜線)後返回該字符串,這裏的「特殊字符」是指那些在正則表達式中具備特殊意義的字符。此時,以可選參數kcode來設定字符串的字符編碼(省略時使用$KCODE
的值)。regexp
指定字符編碼的方法與$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
self =~ string
self === string
與string字符串進行正則表達式的匹配操做。若匹配成功則返回匹配位置的索引(首位爲0)。若匹配失敗或者string爲nil
時,返回nil
。
內部變量$~中保存的是與匹配相關的信息。
若string既非nil
又非String對象時,引起TypeError異常。
ruby 1.7 特性:Regexp#=== 返回布爾值。若參數並不是字符串或匹配失敗則返回false,若匹配成功則返回true。
~ self
與$_
變量的值之間進行匹配操做。等同於
self =~ $_
casefold?
若編譯正則表達式時不區分大小寫,則返回真。
kcode
採用與$KCODE相同的形式返回編譯正則表達式時的字符編碼。若編譯正則表達式時沒有固定的編碼(使用匹配時的$KCODE的值)時,返回nil。
match(str)
match(str, [pos]) ((<ruby 1.9 特性>))
除去返回MatchData對象這點區別之外,它與self =~ str
是相同的。匹配失敗時返回nil。
若只想獲得與正則表達式相匹配的部分字符串時,能夠
bar = /foo(.*)baz/.match("foobarbaz").to_a[1] foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.indexes(1,2,3)
這樣。(之因此使用to_a是由於考慮到可能會出現匹配失敗的狀況。)