Ruby - 正則表示式



正則表示式是一種特殊的字元序列,它使用專門的語法(包含在模式中)來幫助你匹配或查詢其他字串或字串集。

正則表示式字面量是在斜槓之間或在任意分隔符之間的模式,後跟 %r,如下所示:

語法

/pattern/
/pattern/im    # option can be specified
%r!/usr/local! # general delimited regular expression

示例

#!/usr/bin/ruby

line1 = "Cats are smarter than dogs";
line2 = "Dogs also like meat";

if ( line1 =~ /Cats(.*)/ )
   puts "Line1 contains Cats"
end
if ( line2 =~ /Cats(.*)/ )
   puts "Line2 contains  Dogs"
end

這將產生以下結果:

Line1 contains Cats

正則表示式修飾符

正則表示式字面量可以包含一個可選的修飾符來控制匹配的各個方面。修飾符在第二個斜槓字元之後指定,如前所述,可以用以下字元之一表示:

序號 修飾符及描述
1

i

匹配文字時忽略大小寫。

2

o

僅執行一次 #{} 插值,即在第一次評估正則表示式字面量時執行。

3

x

忽略空格並在正則表示式中允許註釋。

4

m

匹配多行,將換行符識別為普通字元。

5

u,e,s,n

將正則表示式解釋為 Unicode(UTF-8)、EUC、SJIS 或 ASCII。如果未指定這些修飾符中的任何一個,則正則表示式假定使用源編碼。

類似於用 %Q 分隔的字串字面量,Ruby 允許你用 %r 後跟任意分隔符開始正則表示式。當你要描述的模式包含許多你不希望轉義的正斜槓字元時,這很有用:

# Following matches a single slash character, no escape required
%r|/|

# Flag characters are allowed with this syntax, too
%r[</(.*)>]i

正則表示式模式

除了控制字元(+ ? . * ^ $ ( ) [ ] { } | \)之外,所有字元都匹配自身。你可以透過在控制字元前面加上反斜槓來轉義它。

正則表示式示例

搜尋和替換

一些使用正則表示式的最重要的 String 方法是subgsub,以及它們的就地變體sub!gsub!

所有這些方法都使用 Regexp 模式執行搜尋和替換操作。sub & sub! 替換模式的第一次出現,而gsub & gsub! 替換所有出現。

subgsub返回一個新字串,而原始字串保持不變,而sub!gsub!修改其呼叫的字串。

以下是一個示例:

#!/usr/bin/ruby

phone = "2004-959-559 #This is Phone Number"

# Delete Ruby-style comments
phone = phone.sub!(/#.*$/, "")   
puts "Phone Num : #{phone}"

# Remove anything other than digits
phone = phone.gsub!(/\D/, "")    
puts "Phone Num : #{phone}"

這將產生以下結果:

Phone Num : 2004-959-559
Phone Num : 2004959559

以下是另一個示例:

#!/usr/bin/ruby

text = "rails are rails, really good Ruby on Rails"

# Change "rails" to "Rails" throughout
text.gsub!("rails", "Rails")

# Capitalize the word "Rails" throughout
text.gsub!(/\brails\b/, "Rails")
puts "#{text}"

這將產生以下結果:

Rails are Rails, really good Ruby on Rails
廣告

© . All rights reserved.