a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Ruby > 正文

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

2020-02-24 15:37:10
字體:
來源:轉載
供稿:網友

正則表達式是通過使用特殊語法的模式來匹配或查找其他字符串或字符串集的特殊字符序列,今天是武林技術頻道小編為大家介紹的詳解Ruby中正則表達式對字符串的匹配和替換的操作方法。

正則匹配

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

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

ruby;">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當中是用//來表示正則表達式匹配語句的。大家可以運行一下,上面的語句是匹配三個數字兩邊都是小寫字母的一個字符串。我們運行上面代碼,將會出現結果10.你一定很奇怪,為什么會出現10這個結果,這就是=~的魅力,他是將匹配結果的首次出現位置打印出來。

那下面我們來看看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) 

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

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 

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

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

?
它是輸出的該對象信息。

下面又出現了一個新的情況,假設一個字符串當中有很多符合規則的信息怎么辦呢。上面的語句只能匹配出最先找到的結果,而我們需要把所有的結果都打印出來怎么辦呢?剛開始我受java的影響,認為match的結果會是一個集合,所以怎么考慮也沒有整出來。后來發現有一個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]}"} 

很簡單,結果就是:

Theresultis414 Theresultis223 Theresultis123  Theresultis414 Theresultis223 Theresultis123 

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

正則表達式的分組

可以對正則表達式進行分組,并在匹配成功后把分組的值存儲到$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/ 

?

上文是武林技術頻道小編介紹的詳解Ruby中正則表達式對字符串的匹配和替換的操作方法,大家都了解了嗎?小編希望大家認真閱讀分享出來的知識,這些內容都是經過篩選才和大家分享的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 欧美精品在线一区 | 国产精品久久久久久久久久久久午夜片 | 久久精品视频亚洲 | 伊人免费视频 | 成人精品在线视频 | 成人免费一区二区三区视频网站 | 成人免费视频播放 | www.久久精品视频 | 国产av一级毛片 | 视色网站 | 99成人| 日本久久久久久久久久久久 | 一区二区日韩精品 | 久久久久久久99精品免费观看 | 亚洲第一成年免费网站 | 精品一区二区av | 亚洲成人天堂 | 欧美日本亚洲 | 久久9色 | 久久精品这里热有精品 | 欧美精三区欧美精三区 | 国产一区二区视频免费 | 国产精品亚洲一区 | 欧美日韩国产一区二区三区不卡 | 97电影在线观看 | 久草免费在线 | 成人久久久精品乱码一区二区三区 | 国产精品99久久久久久www | 九九热在线视频 | 一本色道久久综合狠狠躁篇的优点 | 亚洲欧美日韩在线一区二区 | 国产日韩欧美一区 | 中出片 | 一级黄色片看看 | 中文字幕在线视频免费观看 | 男女羞羞视频网站 | 中国免费看的片 | 国产精品久久久久婷婷二区次 | 亚洲国产高清视频 | 色婷婷综合久久久久中文 | 免费成人av|