Ruby 高階程式設計 正則

2022-06-11 13:42:11 字數 2686 閱讀 1316

#【【正則】】

=begin

sub 和 gsub 及它們的替代變數 sub! 和 gsub! 是使用正規表示式時重要的字串方法。

所有這些方法都是使用正規表示式模式執行搜尋與替換操作。sub 和 sub! 替換模式的第一次出現,gsub 和 gsub! 替換模式的所有出現。

sub 和 gsub 返回乙個新的字串,保持原始的字串不被修改,而 sub! 和 gsub! 則會修改它們呼叫的字串。

=end

#例子phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##"

phone1 = phone.sub(/#.*$/,"")

puts "**號碼:#"

puts "**號碼:#"

=begin

**號碼:156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##

**號碼:156-1835-7999

=end

phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##"

phone1 = phone.sub!(/['a'-'c'].*$/,"")

puts "**號碼:#"

puts "**號碼:#"

=begin

**號碼:156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##

**號碼:

=end

phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##"

phone = phone.sub!(/#.*$/,"")

puts "**號碼:#" #**號碼:156-1835-7999

phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; ##這次是真的 ##"

phone = phone.gsub!(/#.*/,"")

puts "**號碼:#" #**號碼:156-1835-7999

phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; ##這次是真的 ##"

phone = phone.gsub!(/#.*$/,"")

puts "**號碼:#" #**號碼:156-1835-7999

# 移除除數字以外的其他字元

phone = "156-1835-7999 #這是乙個**號碼; #這真是乙個**號碼; 這次是真的 ##"

phone = phone.gsub!(/\d/,"")

puts "**號碼:#" #**號碼:15618357999

# 知識點:參考

image

ruby的正規表示式以"//"作為構造方法。表示式返回乙個regexp的物件。

image

一般規則:

/a/匹配字元a。

/\?/匹配特殊字元?。特殊字元包括^, $, ? , ., /, \, [, ], , (, ), +, *.

.匹配任意字元,例如/a./匹配ab和ac。

/[ab]c/匹配ac和bc,之間代表範圍。例如:/[a-z]/ , /[a-za-z0-9]/。

/[^a-za-z0-9]/匹配不在該範圍內的字串。

/[\d]/代表任意數字

/[\w]/代表任意字母,數字或者_

/[\s]/代表空白字元,包括空格,tab和換行。

/[\d]/,/[\w]/,/[\s]/均為上述的否定情況。

高階規則:

?代表0或1個字元。/mrs?\.?/匹配"mr","mrs","mr.","mrs."。

*代表0或多個字元。/hello*/匹配"hello","hellojack"。

+代表1或多個字元。/a+c/匹配:"abc","abbdrec"等等。

/d/匹配3個數字。

/d/匹配1-10個數字。

/d/匹配3個數字以上。

/([a-z]\d)/匹配首位是大寫字母,後面4個是數字的字串。

下圖匹配的是:m後面是字元r, 後面是0或1個字元s, 在後面是0或1個字元"." , 匹配mr、mrs、mr.、mrs.

image

下面可以匹配

, ,,< /p>.

image

正規表示式操作

string和regexp均支援=~和match 2個查詢匹配方法

image

可以看出,如果能夠匹配,=~返回匹配的字串位置,而match返回乙個matchdata物件。如果不匹配返回nil。

matchdata可以取出其中符合各個子匹配的內容。看下面的例子:

image

m[0]返回匹配主表示式的字串

下面的方法是等同的:

m[n] == m.captures[n]

ruby也自動的為我們填寫了一些全域性變數,它們以數字做名: $1,$2,等等,$1包含的是正規表示式中從左側開始的第一對小括號內的子模式所匹配的字串

我們看出匹配時,是從外到內,從左到右的順序

其它的一些方法

image

嘗試ruby程式設計

1.安裝好ruby1.8.7 在命令列中ruby v 顯示版本號,就說明ruby已經安裝好了。雙擊路徑下的irb.bat檔案,進入命令視窗,進行互動式ruby 2.簡單用法 1 puts puts hello world 回車 hello world puts 1 3 4puts 2 3 6 2 d...

Ruby 元程式設計

ruby 語言在抽象層面有了元程式設計支援,功能相當強大,如果業務模型有很大的相似性,相信元程式設計會讓你節省大量 舉乙個小例如下,這裡只是使用了乙個class eval 還有instance eval,module eval,function.parameters等大量方法可以呼叫 那麼可以設計如...

Ruby程式設計規範

也不知道算不算翻譯,我也不懂日語,看 瞎猜的,隨後會附上完整的翻譯,朋友已經幫忙翻譯去了。哈哈 url 一。縮排 縮排應該是2個字元,這個是公認的。比如 if x 0 if y 0 puts x 0 y 0 endend二。每行最多字元不能超過80個。三。空行,意思大概就是類和類之間,方法和方法之間...