在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Ruby/ Ruby正則表達(dá)式
Ruby for循環(huán)
Ruby教程
Ruby文件I/O
Ruby迭代器
Ruby哈希
Ruby日期時(shí)間
Ruby類和對(duì)象
Ruby快速入門(30分鐘)
Ruby redo/retry語(yǔ)句
Ruby模塊
Ruby解析XML(REXML)
Ruby if-else語(yǔ)句
Ruby的功能特點(diǎn)
Ruby break/next語(yǔ)句
Ruby方法
Ruby是什么?
Ruby與Python比較
Ruby Case語(yǔ)句
Ruby目錄
Ruby范圍
Ruby異常
Ruby套接字編程(Socket)
Ruby字符串
Ruby安裝配置
Ruby運(yùn)算符
Ruby while/do...while循環(huán)語(yǔ)句
Ruby第一個(gè)HelloWorld程序
Ruby until循環(huán)語(yǔ)句
Ruby注釋
Ruby塊
Ruby數(shù)據(jù)類型
Ruby面向?qū)ο?/span>
Ruby正則表達(dá)式
Ruby數(shù)組
Ruby變量
Ruby多線程編程

Ruby正則表達(dá)式

正則表達(dá)式也拼寫為 regexp,它用于保存正則表達(dá)式,用于將模式與字符串匹配。 在Ruby中,一個(gè)模式寫在正斜杠字符之間。 它們描述一個(gè)字符串的內(nèi)容。 Ruby正則表達(dá)式更類似于Perl正則表達(dá)式。

語(yǔ)法

/search string/

Ruby 1.9使用Oniguruma正則表達(dá)式庫(kù),但Ruby 2.0使用Onigmo正則表達(dá)式庫(kù)。 Onigmo是Oniguruma的一個(gè)分支子庫(kù),增加了一些新功能。

=~ 和 #match操作符

通過使用=~#match操作符來實(shí)現(xiàn)模式匹配。

=~

這是基本的匹配模式,這里使用兩個(gè)操作數(shù)。 一個(gè)是正則表達(dá)式,另一個(gè)是字符串。 正則表達(dá)式與字符串匹配。

如果找到匹配,則運(yùn)算符返回第一個(gè)匹配索引,否則返回零(nil)。

示例:

F:\worksp\ruby>irb
irb(main):001:0> /yii/ =~ 'Hello, welcom to yiibai.com.'
=> 17
irb(main):002:0> /to/ =~ 'Hello, welcom to yiibai.com.'
=> 14
irb(main):003:0> /too/ =~ 'Hello, welcom to yiibai.com.'
=> nil
irb(main):004:0>

#match

該運(yùn)算符返回匹配數(shù)據(jù)對(duì)象,否則返回零(nil)。

F:\worksp\ruby>irb
irb(main):001:0> /yiibai/.match('Ruby tutorial at yiibai.com')
=> #<MatchData "yiibai">
irb(main):002:0> /Ruby/.match('Ruby tutorial at yiibai.com')
=> #<MatchData "Ruby">
irb(main):003:0> /Py/.match('Ruby tutorial at yiibai.com')
=> nil
irb(main):004:0>

元字符和轉(zhuǎn)義

元字符在模式中具有特定含義。 要匹配一個(gè)字符串,它們將被轉(zhuǎn)回(\)或轉(zhuǎn)義。 一些元字符是(,),(.),(?),(+),( - ),(*),[,],{,}。否則返回匹配的字符串。

示例:

F:\worksp\ruby>irb
<elcome to our site\./.match('Does Hello, welcome to our site.')
=> #<MatchData "Hello, welcome to our site.">
irb(main):003:0> /2 \* 2 \+ 3 \- 1 = \?/.match('Does 2 * 2 + 3 - 1 = ?')
=> #<MatchData "2 * 2 + 3 - 1 = ?">
irb(main):004:0> /2 * 2 + 3 - 1 = ?/.match('Does 2 * 2 + 3 - 1 = ?')
=> nil
irb(main):005:0>

字符類

元字符在模式中具有特定含義。 要匹配一個(gè)字符串,它們將被轉(zhuǎn)回(\)或轉(zhuǎn)義。

一個(gè)字符類被包圍在方括號(hào)內(nèi)。

[ab]

這里,[ab]表示ab。 與/ab/相反,它表示ab

示例

F:\worksp\ruby>irb
irb(main):001:0> /j[afdvs]av/.match('java')
=> nil
irb(main):002:0> /j[afdvs]va/.match('java')
=> #<MatchData "java">
irb(main):003:0> /j[afdvs]va/.match('jpva')
=> nil
irb(main):004:0>

[a-d]

這里,[a-d]等同于[abcd]。 連字符(- )字符類表示字符的范圍。

示例

F:\worksp\ruby>irb
irb(main):001:0> /[a-ge-p]/.match('go')
=> #<MatchData "g">
irb(main):002:0> /[a-fe-p]/.match('go')
=> #<MatchData "g">
irb(main):003:0>

[^a-d]

^符號(hào)表示范圍中不存在的任何其他字符。

示例

F:\worksp\ruby>irb
irb(main):001:0> /[^a-ge-p]/.match('go')
=> nil
irb(main):002:0> /[^a-ge-n]/.match('go')
=> #<MatchData "o">
irb(main):003:0> /[^a-fe-n]/.match('go')
=> #<MatchData "o">
irb(main):004:0> /[^a-fh-n]/.match('go')
=> #<MatchData "g">
irb(main):005:0>

重復(fù)

現(xiàn)在定義的字符與單個(gè)字符匹配。在重復(fù)元字符的幫助下,可以指定需要發(fā)生的次數(shù)。 這些元字符稱為量詞。

  • * : 零次或多次
  • + : 一次或多次
  • ? : 零次或一次(可選)
  • {n} : 正好n
  • {n, }: n次以上
  • {,m} : m次以下
  • {n,m} : 至少n和最多m

實(shí)例

irb(main):006:0> "SSSIT".match(/S{3}+[[:upper:]]+[[:upper:]]/)
=> #<MatchData "SSSIT">
irb(main):007:0>
irb(main):008:0*
irb(main):009:0* "yiiBaicom".match(/[[:lower:]]+[[:upper:]]+com/)
=> nil
irb(main):010:0> "yiiBAIcom".match(/[[:lower:]]+[[:upper:]]+com/)
=> #<MatchData "yiiBAIcom">
irb(main):011:0>

分組

分組使用括號(hào)將項(xiàng)目組合在一起。將這些術(shù)語(yǔ)分組成一個(gè)。

示例:

F:\worksp\ruby>irb
irb(main):001:0> /[aeiou]\w{2}/.match('family')
=> #<MatchData "ami">
irb(main):003:0> /([aeiou]\w){2}/.match('family')
=> #<MatchData "amil" 1:"il">
irb(main):004:0>

在這個(gè)例子中,第一個(gè)模式匹配一個(gè)元音,后跟兩個(gè)字符。

在第二種模式中,它匹配一個(gè)元音后跟一個(gè)字符,兩次。

(?:..)

此表達(dá)式提供分組而不捕獲。 它結(jié)合術(shù)語(yǔ)而不創(chuàng)建反向引用。

示例:

irb(main):006:0> /I(n)(de)pen\2\1tly/.match('independently')
=> nil
irb(main):007:0> /i(n)(de)pen\2\1tly/.match('independently')
=> #<MatchData "independently" 1:"n" 2:"de">
irb(main):009:0> /i(?:n)(de)pen\1ntly/.match('independently')
=> #<MatchData "independently" 1:"de">
irb(main):010:0>