Ruby 正規表示式(二)

2021-08-02 23:10:39 字數 1912 閱讀 5477

使用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進行設定,或顯式地使用漢字選項 請參考正規表示式字面值 等方式進行的匹配多位元組字元的正規表示式。行首。與字串的頭部或換行符...