主頁 > 知識庫 > 詳解Ruby中正則表達式對字符串的匹配和替換操作

詳解Ruby中正則表達式對字符串的匹配和替換操作

熱門標簽:真人語音電銷機器人系統(tǒng) 浦東上海400開頭的電話申請 買了外呼系統(tǒng)不想用了怎么辦 邯鄲外呼調(diào)研線路 開封百應電銷機器人聯(lián)系方式 樂昌電話機器人 武漢呼叫中心外呼系統(tǒng)線路商 電話機器人電話卡封號怎么辦 北京語音電銷機器人價格

正則匹配

說起Ruby當然要提起它的正則表達式機制,正則表達式作為一個強大的匹配語言已經(jīng)越來越多的使用到不同的領域當中,從字符串驗證,匹配,到網(wǎng)頁抽取等。雖然有些人詬病與正則表達式的匹配效率,但是考慮到正則的強大匹配能力也就無所謂了。

說起Ruby正則表達式不就不能不說起Ruby的=~和match兩種匹配方式,我們還是用實例來說明一下這兩種匹配方式的區(qū)別吧。先來說一說=~的用法吧:

message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
puts regex=~message 
message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
puts regex=~message 

在Ruby當中是用//來表示正則表達式匹配語句的。大家可以運行一下,上面的語句是匹配三個數(shù)字兩邊都是小寫字母的一個字符串。我們運行上面代碼,將會出現(xiàn)結(jié)果10.你一定很奇怪,為什么會出現(xiàn)10這個結(jié)果,這就是=~的魅力,他是將匹配結(jié)果的首次出現(xiàn)位置打印出來。

那下面我們來看看match吧:

message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
puts regex.match(message) 
 
message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
 
puts regex.match(message) 

我們來看看輸出結(jié)果吧:f414j。該字符串表示的正則語句匹配的所有符合規(guī)則的結(jié)果集。不知道大家注意到?jīng)],我們在正則表達式里面用到了括號,我們希望抽取出三個數(shù)字就可以了。當然這也很簡單,我們只需要在上面的代碼當中稍作修改即可:

message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
regex.match(message) 
puts $1 
 
message="afhadhffkdf414j" 
regex=/[a-z](\d{3})[a-z]/ 
regex.match(message) 
puts $1 

結(jié)果自然是414.為什么要使用$1而不是$0呢,我們看看$0的結(jié)果吧。

C:/Users/Administrator/Documents/NetBeansProjects/RubyApplication1/lib/regex.rb

 
它是輸出的該對象信息。

下面又出現(xiàn)了一個新的情況,假設一個字符串當中有很多符合規(guī)則的信息怎么辦呢。上面的語句只能匹配出最先找到的結(jié)果,而我們需要把所有的結(jié)果都打印出來怎么辦呢?剛開始我受java的影響,認為match的結(jié)果會是一個集合,所以怎么考慮也沒有整出來。后來發(fā)現(xiàn)有一個scan方法。代碼如下所示:

message="afhadhffkdf414j9tr3j43i3433094jwoert223jwew123dfdf" 
regex=/[a-z](\d{3})[a-z]/ 
message.scan(regex).each{|m|puts"Theresultis#{m[0]}"} 
 
message="afhadhffkdf414j9tr3j43i3433094jwoert223jwew123dfdf" 
regex=/[a-z](\d{3})[a-z]/ 
message.scan(regex).each{|m|puts"Theresultis#{m[0]}"} 

很簡單,結(jié)果就是:

Theresultis414 
Theresultis223 
Theresultis123 
 
Theresultis414 
Theresultis223 
Theresultis123 

怎么樣,很方便吧。很簡單的就把所有的匹配結(jié)果都抽取出來了。

正則表達式的分組

可以對正則表達式進行分組,并在匹配成功后把分組的值存儲到$1,$2,$3,$4.......

print $1,"\n",$2 if "a1b2c3d4e5" =~ /(\w{2})(\w*)/ 

字符串的正則替換:

print "abcd".sub(/\w/,"9") 
print "\n"  
print "abcd".gsub(/\w/,"9") 


正則中的特殊全局變量:

  •     $1,$2,$3....分組匹配文本
  •     $`   匹配文本之前的文本
  •     $'    匹配文本之后的文本
print pre name="code" class="ruby">,"\n",{1},"\n", 

if "ab9cd" =~ /\d/ 

您可能感興趣的文章:
  • python 正則表達式 re.sub & re.subn
  • JS正則表達式修飾符global(/g)用法分析
  • iOS App開發(fā)中Objective-C使用正則表達式進行匹配的方法
  • Python的爬蟲包Beautiful Soup中用正則表達式來搜索
  • MongoDB正則表達式及應用
  • 深入淺析正則表達式中的\B和\b

標簽:自貢 石嘴山 鄂州 宜春 六安 淄博 河北 松原

巨人網(wǎng)絡通訊聲明:本文標題《詳解Ruby中正則表達式對字符串的匹配和替換操作》,本文關鍵詞  詳解,Ruby,中,正則,表達式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Ruby中正則表達式對字符串的匹配和替換操作》相關的同類信息!
  • 本頁收集關于詳解Ruby中正則表達式對字符串的匹配和替換操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章