1.建立正規表示式
a) reg1 = /^[a-z]*$/ #將模式的定義放在兩個正斜槓之間,返回乙個regexp物件
b) reg2 = regexp.new(『^[a-z]*$』) #建立乙個regexp物件
c) reg3 = %r #使用前置的%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物件的to_a或captures方法返回包含其值的乙個陣列:
x = /(^.*)(#)(.*)/.match( 'def mymethod # this is a very nice method' )
x.captures.each
上面**會輸出:
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]/) #=> 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個數字
/d/匹配1-10個數字
d/匹配3個數字以上
/([a-z]\d)/
匹配首位是大寫字母,後面4個是數字的字串
Ruby學習筆記 正規表示式
1.建立正規表示式 a reg1 a z 將模式的定義放在兩個正斜槓之間,返回乙個regexp物件 b reg2 regexp.new a z 建立乙個regexp物件 c reg3 r 使用前置的 r 2.匹配正則式 string和regexp都支援以下兩個方法 a match方法 匹配成功時返回...
Ruby筆記 正規表示式
ruby對正規表示式支援非常好,下面將對我經常使用到的做乙個總結,包括ruby中正則的寫法,匹配的方法,替換,分組匹配等。主要有三種 mm dd regexp.new mm dd r三者效果相同,實質都是新建了乙個regexp的類。cat dog and cat 返回8 mt cat match b...
ruby正規表示式
ruby用 將正規表示式括起來。表示開頭,表示結尾,表示0個以上的任意字元。現在就講講正規表示式的規則的寫法。正規表示式中有很多上述的具有特別意義的字元。首先是下列字元。範圍描述符。a z 表示從a到z之間的任意乙個。w 英文本母和數字。即 0 9 a z a z w 非英文本母和數字 s 空字元,...