Ruby筆記《一》RegexpRegex

來源:互聯網
上載者:User

 

Regex

Regex在很多情境都適用。例如,驗證字串是否匹配格式,尋找匹配的字串,替換匹配的字串。

很多程式設計語言都支援Regex,文法也相近。

Regex由兩部分組成:模式和匹配字串。

通常我們說的寫一個Regex,就是寫一個模式。然後驗證一些輸入的字串是否匹配這個模式。

 

Regexp

在ruby中模式叫做Regexp。用/.../或者%r(...)包起來的內容就是這個Regexp。

例如

 
  1. /regexp/ 
  2. %r(regexp) 

haystack中包含y,所以他們就匹配了。

 
  1. /y/.match('haystack') #=> #<MatchData "y"> 

haystack中不包含needle,所以就不匹配,返回nil。

 
  1. /needle/.match('haystack') #=> nil 

haystack中包含hay,所以就匹配。

 
  1. /hay/.match('haystack')    #=> #<MatchData "hay"> 
 

Metacharacters and Escapes

字元(, ), [, ], {, }, ., ?, +, *都是元字元,在模式中特殊的含義,如果想要匹配這些字串的,需要在它們前面加上反斜線\,使得這些特殊字元從模式中escape,代表普通的字元。

 
  1. /1 \+ 2 = 3\?/.match('Does 1 + 2 = 3?') #=> #<MatchData "1 + 2 = 3?"> 

ruby運算式也可以嵌入到模式中,只要寫在#{...}中就可以。

 
  1. place = "東京都" 
  2. /#{place}/.match("Go to 東京都") 
  3.     #=> #<MatchData "東京都"> 
 

Character Classes

用[]括起來的一些字元,看他們是否在match中出現。/[ab]/代表a或b,/ab/代表a後面要跟著b。

 
  1. /W[aeiou]rd/.match("Word") #=> #<MatchData "Word"> 

用-串連的兩個字元,代表一個範圍,[a-d]和[abcd]是一個意思。

[]中可以包含多個範圍[a-dx-z]和[abcdxyz]是一個意思。

 
  1. /[0-9a-f]/.match('9f') #=> #<MatchData "9"> 
  2. /[9f]/.match('9f')     #=> #<MatchData "9"> 

^代表相反的意思,就是除了模式中^後面的內容。

 
  1. /[^a-eg-z]/.match('f') #=> #<MatchData "f"> 
  • /./,代表任一字元,新行除外。
  • /./m,代表任一字元,m代表可以匹配多行。
  • /\w/,代表一個字元,[a-zA-Z0-9]。
  • /\W/,代表一個非字元,[^a-zA-Z0-9]。
  • /\d/,代表一個數字,[0-9]。
  • /\D/,代表一個非數字,[^0-9]。
  • /\h/,代表一個十六進位字元,[0-9a-fA-F]。
  • /\H/,代表一個非十六進位字元,[^0-9a-fA-F]。
  • /\s/,代表一個空白字元,[ \t\r\n\f]/。
  • /\S/,代表一個非空白字元,[^ \t\r\n\f]/。

 

Repetition重複

重複符號可以指明字元重複的次數。

  • * - 0次或多次。

  • + - 1次或多次。

  • ? - 0次或多次。

  • {n} - n次。

  • {n,} - n次或更多。

  • {,m} - m次或更少。

  • {n,m} - 最少n次,最多m次。

重複預設是貪婪的,它會儘力向後匹配,匹配更多的內容。懶惰匹配只找到最近的匹配字串,只做最少量的匹配。

通過添加?就可以使貪婪變成懶惰。

 
  1. /<.+>/.match("<a><b>")  #=> #<MatchData "<a><b>"> 
  2. /<.+?>/.match("<a><b>") #=> #<MatchData "<a>"> 

 

 

 

參考文獻

1.Regexp

2.SEO需要掌握的Regex

 

本文出自 “突破中的IT結構師” 部落格,請務必保留此出處http://virusswb.blog.51cto.com/115214/1043505

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.