Regex是一種特殊序列的字元,它通過使用有專門文法的模式來匹配或尋找其他字串或字串集合。
文法
Regex從字面上看是一種介於斜杠之間或介於跟在 %r 後的任意分隔字元之間的模式,如下所示:
/pattern//pattern/im # 可以指定選項%r!/usr/local! # 一般的分隔的Regex執行個體#!/usr/bin/ruby line1 = "Cats are smarter than dogs";line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats"endif ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs"end
這將產生以下結果:
Regex修飾符
Regex從字面上看可能包含一個可選的修飾符,用於控制各方面的匹配。修飾符在第二個斜杠字元後指定,如上面執行個體所示。下標列出了 可能的修飾符:
就像字串通過 %Q 進行分隔一樣,Ruby 允許您以 %r 作為Regex的開頭,後面跟著任意分隔字元。這在描述包含大量您不想轉義的斜杠字元時非常有用。
# 下面匹配單個斜杠字元,不轉義%r|/| # Flag 字元可通過下面的文法進行匹配%r[</(.*)>]i
Regex模式
除了控制字元,(+ ? . * ^ $ ( ) [ ] { } | \),其他所有字元都匹配本身。您可以通過在控制字元前放置一個反斜線來對控制字元進行轉義。
下表列出了 Ruby 中可用的Regex文法。
搜尋和替換
sub 和 gsub 及它們的替代變數 sub! 和 gsub! 是使用Regex時重要的字串方法。
所有這些方法都是使用Regex模式執行搜尋與替換操作。sub 和 sub! 替換模式的第一次出現,gsub 和 gsub! 替換模式的所有出現。
sub 和 gsub 返回一個新的字串,保持原始的字串不被修改,而 sub! 和 gsub! 則會修改它們調用的字串。
下面是一個執行個體:
#!/usr/bin/ruby phone = "2004-959-559 #This is Phone Number" # 刪除 Ruby 的注釋phone = phone.sub!(/#.*$/, "") puts "Phone Num : #{phone}" # 移除數字以外的其他字元phone = phone.gsub!(/\D/, "") puts "Phone Num : #{phone}"
這將產生以下結果:
Phone Num : 2004-959-559Phone Num : 2004959559
下面是另一個執行個體:
#!/usr/bin/ruby text = "rails are rails, really good Ruby on Rails" # 把所有的 "rails" 改為 "Rails"text.gsub!("rails", "Rails") # 把所有的單詞 "Rails" 都改成首字母大寫text.gsub!(/\brails\b/, "Rails") puts "#{text}"
這將產生以下結果:
Rails are Rails, really good Ruby on Rails