自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

捕捉Ruby正則表達(dá)式用法精髓

開發(fā) 后端
正則表達(dá)式作為一個(gè)強(qiáng)大的匹配語言已經(jīng)越來越多的使用到不同的領(lǐng)域當(dāng)中,文章將介紹Ruby正則表達(dá)式的兩種常用的匹配方式,并分析了兩種匹配方式的區(qū)別。

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

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

  1. message="afhadhffkdf414j" 
  2. regex=/[a-z](\d{3})[a-z]/  
  3. putsregex=~message  
  4. message="afhadhffkdf414j" 
  5. regex=/[a-z](\d{3})[a-z]/  
  6. putsregex=~message 

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

那下面我們來看看match吧:

  1. message="afhadhffkdf414j" 
  2. regex=/[a-z](\d{3})[a-z]/  
  3. putsregex.match(message)  
  4.  
  5. message="afhadhffkdf414j" 
  6. regex=/[a-z](\d{3})[a-z]/  
  7.  
  8. putsregex.match(message) 

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

  1. message="afhadhffkdf414j" 
  2. regex=/[a-z](\d{3})[a-z]/  
  3. regex.match(message)  
  4. puts$1  
  5.  
  6. message="afhadhffkdf414j" 
  7. regex=/[a-z](\d{3})[a-z]/  
  8. regex.match(message)  
  9. puts$1 

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

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

它是輸出的該對(duì)象信息。

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

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

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

  1. Theresultis414  
  2. Theresultis223  
  3. Theresultis123  
  4.  
  5. Theresultis414  
  6. Theresultis223  
  7. Theresultis123 

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

【編輯推薦】

  1. Ruby正則表達(dá)式與Perl相似之處頗多
  2. Ruby正則表達(dá)式示例講解
  3. Ruby基礎(chǔ)代碼經(jīng)驗(yàn)分享
  4. 幾種常見Ruby核心類概念總結(jié)
  5. Ruby常用庫基礎(chǔ)語法詳解
責(zé)任編輯:王曉東 來源: 博客園
相關(guān)推薦

2009-12-14 11:33:59

Ruby正則表達(dá)式

2010-07-14 09:37:46

Perl正則表達(dá)式

2010-07-19 10:40:16

Perl正則表達(dá)式

2010-08-09 13:58:59

Flex正則表達(dá)式

2016-12-05 17:03:59

用法正則表達(dá)式

2010-08-12 10:35:06

Flex正則表達(dá)式

2018-09-27 15:25:08

正則表達(dá)式前端

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2024-09-14 09:18:14

Python正則表達(dá)式

2009-12-18 13:57:35

Ruby正則表達(dá)式

2010-03-25 18:25:36

Python正則表達(dá)式

2021-01-27 11:34:19

Python正則表達(dá)式字符串

2009-02-18 09:48:20

正則表達(dá)式Java教程

2009-09-16 18:19:34

正則表達(dá)式組

2011-06-02 12:34:16

正則表達(dá)式

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2019-07-17 15:45:47

正則表達(dá)式字符串前端

2022-03-28 06:19:14

正則表達(dá)式開發(fā)

2016-11-10 16:21:22

Java 正則表達(dá)式

2022-01-04 11:35:03

Linux Shel正則表達(dá)式Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)