国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-10-26 19:29:11
字體:
來源:轉載
供稿:網(wǎ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)結果10.你一定很奇怪,為什么會出現(xiàn)10這個結果,這就是=~的魅力,他是將匹配結果的首次出現(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) 

我們來看看輸出結果吧:f414j。該字符串表示的正則語句匹配的所有符合規(guī)則的結果集。不知道大家注意到?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 

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

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

 
它是輸出的該對象信息。

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

很簡單,結果就是:

Theresultis414 Theresultis223 Theresultis123  Theresultis414 Theresultis223 Theresultis123 

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 万山特区| 扎赉特旗| 海淀区| 晋江市| 赫章县| 如东县| 无为县| 专栏| 郓城县| 尼木县| 扎赉特旗| 三明市| 台州市| 仁怀市| 玉门市| 内江市| 息烽县| 汕尾市| 合肥市| 哈尔滨市| 平罗县| 盐边县| 龙口市| 招远市| 孟连| 绿春县| 大宁县| 卫辉市| 古蔺县| 醴陵市| 台北县| 广宗县| 石家庄市| 新余市| 贵德县| 南木林县| 社旗县| 通渭县| 香港 | 台山市| 石棉县|