Ruby學習筆記-正規表示式
1.建立正規表示式
a) reg1 = /^[a-z]*$/ #將模式的定義放在兩個正斜槓之間,返回一個Regexp物件
b) reg2 = Regexp.new(‘^[a-z]*$’) #建立一個Regexp物件
c) reg3 = %r{^[a-z]*$} #使用前置的%r
2.匹配正則式: String和Regexp都支援以下兩個方法
a) match方法: 匹配成功時返回MatchData類的一個例項;否則返回nil;
b) =~ 操作符: 匹配成功,返回一個索引(integer);否則,返回nil;
例:
puts( /abc/ =~ 'abc' ) #=>return 0
puts( /abc/ =~ 'cdg' ) #=>return nil
puts( /abc/.match('abc') ) #=>return abc
puts( /abc/.match('cdg') ) #=>return nil
3.匹配組
在Ruby正規表示式中,可以用正則式匹配一個或多個子字串;方法是將正
則式用小括號括起來;使用小括號指定的獲取子字串,可以將匹配的字串儲存;如下正則式中有兩個組(hi)和(h…o):
/(hi).*(h...o)/ =~ "The word 'hi' is short for 'hello'."
匹配成功時, 會把匹配的值賦給一些變數(正則式中有多少組就有多少變數), 這些變數可以通過$1,$2,$3…的形式訪問;如果執行上面的那行程式碼,可以使用$1,$2來訪問變數:
print ( $1, " ", $2, "\n" ) #=> hi hello
Note: 如果整個正則式匹配不成功,那麼就不會就有變數被初始化, 而是返回nil.
4. MatchData型別
前面也提到過了,使用=~時返回的是一個整數或nil, 面使用match方法時會返回MatchData物件, 它包含了匹配模式的結果;乍一看,很像是字串:
puts( /cde/.match('abcdefg') ) #=> cde #=>cde
puts( /cde/=~('abcdefg') ) #=> cde #=>2
實際上, 它是MatchData類的一個例項且包含一個字串:
p( /cde/.match('abcdefg') ) #=> #<MatchData: “cde” >
可以使用MatchData物件的to_a或captures方法返回包含其值的一個陣列:
x = /(^.*)(#)(.*)/.match( 'def myMethod # This is a very nice method' )
x.captures.each{ |item| puts( item ) }
上面程式碼會輸出:
def myMethod
#
This is a very nice method
Note: captures 和to_a方法有一點點區別,後者會包含原始串
x.captures #=>["def myMethod ","#"," This is a very nice method"]
x.to_a #=>["def myMethod # This is a very nice method","def myMethod ","#"," This is a very nice method"]
5. Pre & Post 方法
a) pre_match或($`): 返回匹配串前的串
b) post_match或($'): 返回匹配串後的串
x = /#/.match( 'def myMethod # This is a very nice method' )
puts( x.pre_match ) #=> def myMethod
puts( x.post_match ) #=> This is a very nice method
6. 貪婪匹配
當一個字串包含多個可能的匹配時,有時可能只想返回第一個匹配的串;
有時可能想返回所有匹配的串,這種情況就叫貪婪匹配;符號*(0 or more) 和 + (1 or more)可以用來進行貪婪匹配。使用符號? (0 or 1) 進行最少匹配;
puts( /.*at/.match('The cat sat on the mat!') ) #=> returns: The cat sat on the mat
puts( /.*?at/.match('The cat sat on the mat!') ) #=> returns: The cat
7. 字串中的方法
a) =~ 和match: 用法同Regexp.
b) String.scan(pattern):儘可能多的去匹配,並把第一個匹配新增到陣列中.
TESTSTR = "abc is not cba"
b = /[abc]/.match( TESTSTR ) #=> MatchData: "a" puts( "--scan--" )
a = TESTSTR.scan(/[abc]/) #=> Array: ["a", "b", "c", "c", "b", "a"]
此外,還可以給sacn方法傳遞一個block:
a = TESTSTR.scan(/[abc]/){|c| print( c.upcase ) } #=> ABCCBA
c) String.split(pattern):基於pattern來分割原串並返回一個陣列;如果pattern為空(//),就把原串分割為字元;
s = "def myMethod # a comment"
p( s.split( /m.*d/ ) ) # => ["def ", " # a comment"]
p( s.split( /\s/ ) ) #=> ["def", "myMethod", "#", "a", "comment"]
p( s.split( // ) ) # => ["d", "e", "f", " ", "m", "y", "M", "e", "t", "h", "o", "d", " ", "#", " ", "a", " ", "c", "o", "m", "m", "e", "n", "t"]
d) String. slice(pattern):返回匹配的串(原串不變),
String. Slice!(pattern):返回匹配的串並在原串刪除匹配的串(修改了原串的值)
s = "def myMethod # a comment "
puts( s.slice( /m.*d/ ) ) #=> myMethod
puts( s ) #=> def myMethod # a comment
puts( s.slice!( /m.*d/ ) ) #=> myMethod
puts( s ) #=> def # a comment
8.正規表示式匹配規則
規則 |
說明 |
/a/ |
匹配字元a |
/\?/ |
匹配特殊字元?。特殊字元包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *. |
. |
匹配任意字元,例如/a./匹配ab和ac。 |
/[ab]c/ |
匹配ac和bc,[]之間代表範圍,例如:/[a-z]/ , /[a-zA-Z0-9]/。 |
/[^a-zA-Z0-9]/ |
匹配不在該範圍內的字串 |
/[\d]/ |
代表任意數字 |
/[\w]/ |
代表任意字母,數字或者_ |
/[\s]/ |
代表空白字元,包括空格,TAB和換行 |
/[\D]/,/[\W]/,/[\S]/ |
均為上述的否定情況 |
? |
代表0或1個字元 |
* |
代表0或多個字元 |
+ |
代表1或多個字元 |
/d{3}/ |
匹配3個數字 |
/d{1,10}/ |
匹配1-10個數字 |
d{3,}/ |
匹配3個數字以上 |
/([A-Z]\d){5}/ |
匹配首位是大寫字母,後面4個是數字的字串 |
本文轉自賀滿部落格園部落格,原文連結:http://www.cnblogs.com/puresoul/archive/2011/11/29/2267938.html,如需轉載請自行聯絡原作者。
相關文章
- 正規表示式學習筆記筆記
- 正規表示式學習筆記一筆記
- PERL學習筆記---正規表示式筆記
- 正規表示式學習筆記 (轉)筆記
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- Python學習筆記 - 正規表示式Python筆記
- Ruby筆記《一》Regexp正規表示式薦筆記
- js加固之正規表示式學習筆記JS筆記
- 學習筆記-5.1.正規表示式1筆記
- Python下正規表示式學習筆記Python筆記
- 正規表示式學習筆記(1)-認識正則筆記
- python 中的正規表示式學習筆記Python筆記
- Kotlin學習筆記(五十八)正規表示式Kotlin筆記
- PERL學習筆記---正規表示式的應用筆記
- 工作學習筆記(二) 正規表示式(轉載)筆記
- 正規表示式(筆記)筆記
- Python學習筆記|Python之正規表示式Python筆記
- JavaScript正規表示式學習筆記(二) - 打怪升級JavaScript筆記
- 正規表示式學習
- 正規表示式速查筆記筆記
- 正規表示式筆記(四)筆記
- 正規表示式筆記(三)筆記
- 正規表示式筆記(二)筆記
- 正規表示式筆記(一)筆記
- python爬蟲學習筆記4-正規表示式Python爬蟲筆記
- Day1-學習筆記-js之正規表示式筆記JS
- 正規表示式的學習
- Oracle正規表示式學習Oracle
- 學習Java:正規表示式Java
- Go 正規表示式學習Go
- JS筆記(15): 正規表示式JS筆記
- 7,正規表示式(perl筆記)筆記
- 正規表示式學習和練習
- 正規表示式入門學習
- 如何快速學習正規表示式
- 正規表示式學習總結
- JavaScript學習1:正規表示式JavaScript
- JavaScript正規表示式迷你書-筆記JavaScript筆記