使用quote方法的正規表示式
有時候我們想轉義正規表示式中所有的元字元。而quote方法就可以實現。quote 方法會返回轉義了的正規表示式字串,然後在結合new方法,就可以生成新的正規表示式物件。
re1 = regexp.new("abc*def")
re2 = regexp.new(regexp.quote("abc*def"))
p (re1 = ~ "abc*def") #=>nil
p (re2 =~ "abc*def") #=>0
正規表示式的選項
設定正規表示式的選項時,只需在/.../的後面指定即可,如/.../im,這裡i以及m就是正規表示式的選項。
i 忽略英文本母大小寫的選項。制定這個選項後,無論字串中的字母是大寫還是小寫都會被匹配。
x 忽略正規表示式中的空白字元以及#後面的字元選項。指定這個選項後,我們就可以使用#在正規表示式中寫注釋了。
m 指定這個選項後,就可以使用 . 匹配換行符了。
str = "abc\ndef\nghi"
p /def.ghi/ =~ str #=> nil
p /def.ghi/ =~ str #=> 4
regexp.new方法中第二個引數可用於指定選項常量。只需要乙個引數時,可不指定第2個引數或者直接指定nil。
例如,/ruby指令碼/i這一正規表示式,可以像下面這樣寫:
regexp.new("ruby指令碼", regexp::ignorecase)
另外,我們還可用 | 指定多個選項。這時,/ruby指令碼/im這一正規表示式就變成了下面這樣:
regexp.new("ruby指令碼", regexp::ignorecase | regexp::multiline)
捕獲
除了檢查字元是否匹配外,正規表示式還有另外乙個常用的功能,甚至可以說是比匹配更加重要的功能——捕獲(向後引用)。
所謂捕獲,就是從正規表示式的匹配部分提取其中的某部分。通過"$數字"這種形式的變數,就可以獲取匹配了正規表示式中的用()括住的部分字串。
/(.)(.)(.)/ =~ "abc"
first = $1
second = $2
third = $3
p first #=> "a"
p second #=> "b"
p third #=> "c"
在行進匹配的時候,我們只知道是否匹配、匹配第幾個字元之類的資訊。而使用捕獲之後,我們就可以知道哪部分被匹配了。因此通過這個功能,我們就可以非常方便地對字串進行分析。
()也被用於將多個模式整理為乙個。在修改程式中的正規表示式時,如果改變了()的數量,那麼將要引用的部分的索引也會隨之改變,有時就會帶來不方便。這種情況下,我們可以使用(?:)過濾不需要捕獲的模式。
/(.)(\d\d)+(.)/ =~ "123456"
p $1 #=>"1"
p $2 #=>"45"
p $3 #=>"6"
/(.)(?:\d\d)+(.)/ =~ "123456"
p $1 #=>"1"
p $2 #=>"6"
除了「$數字」這種形式外,儲存匹配結果的變數還有$`、$&、$',分別代表匹配部分前的字串、匹配部分後的字串。
/c./ =~ "abcdef"
p $` #=>"ab"
p $& #=>"cd"
p $' #=>"ef"
ruby正規表示式
ruby用 將正規表示式括起來。表示開頭,表示結尾,表示0個以上的任意字元。現在就講講正規表示式的規則的寫法。正規表示式中有很多上述的具有特別意義的字元。首先是下列字元。範圍描述符。a z 表示從a到z之間的任意乙個。w 英文本母和數字。即 0 9 a z a z w 非英文本母和數字 s 空字元,...
Ruby 正規表示式
ruby的正規表示式以 作為構造方法。表示式返回乙個regexp的物件。一般規則 a 匹配字元a。匹配特殊字元?特殊字元包括 匹配任意字元,例如 a.匹配ab和ac。ab c 匹配ac和bc,之間代表範圍。例如 a z a za z0 9 a za z0 9 匹配不在該範圍內的字串。d 代表任意數字...
ruby 正規表示式
ruby支援的正規表示式符號 元字元 有這麼個規則 不帶 的數字和字母不是元字元 帶 的符號也不是元字元 下文中出現的 匹配多位元組字元的正規表示式 是指,通過使用 kcode進行設定,或顯式地使用漢字選項 請參考正規表示式字面值 等方式進行的匹配多位元組字元的正規表示式。行首。與字串的頭部或換行符...