亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby程序中正則表達式的使用教程

2020-02-24 15:39:25
字體:
來源:轉載
供稿:網友

Ruby和Perl一樣,Ruby對正則表達式的其實也是很支持的,本文是一個Ruby程序中正則表達式的使用教程,有需要的朋友可以進入下文參考一下!

Ruby大部分的內置類型都和其它的編程語言很相似。主要有strings,integers,floats,arrays等等。然而,只有腳本語言,如Ruby,Perl,和awk等提供了內置表達式類型的支持。正則表達式盡管比較隱蔽,但卻是一個很強大的文本處理工具。

正則表達式是使用指定的模式匹配字符串的一種簡單的方法。在Ruby中,創建正則表達式的典型方式是把模式寫在兩個斜線之間/pattern/。

畢竟,Ruby就是Ruby,正則表達式也是對象,也能像對象般操作。

例如,你可以使用下面的正則表達式寫一個模式,它匹配一個字符串中包含有Perl或Python。

ruby;"><!--more-->/Perl|Python/

在正斜線體內,是兩個我們要匹配的字符串,它們使用"|"分隔。這個管道符的意思是"左邊的或者右邊的",在這個模式中是Perl或者Python。

你還可以在模式中使用括號,就像是在算術表達式中使用的那樣,因此這個模式還可以寫成

/P(erl|ython)/

你還可以在模式中指定重復。例如加號,/ab+c/匹配字符串中一個a后面有一個或多個b然后跟著是一個c。把加號換成星號,/ab*c/創建的正則表達式是匹配一個a后面跟著0個或多個b然后跟著是一個c。

你還可以在模式中匹配一組字符。常用的字符類型例子有/s,它匹配一個空白字符(space,tab,換行符,等等);/d匹配任意數字;/w匹配任意的典型單詞字符。句號(.)匹配(基本上)任意字符。

我們把所有這些組合起來,做成實用的正則表達式。

//d/d:/d/d:/d/d/ # a time such as 12:34:56/Perl.*Python/  # Perl, zero or more other chars, then Python/Perl Python/  # Perl, a space, and Python/Perl *Python/  # Perl, zero or more spaces, and Python/Perl +Python/  # Perl, one or more spaces, and Python/Perl/s+Python/ # Perl, whitespace characters, then Python/Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python

一但創建了一個模式,不能使用它是件很郁悶的事情。匹配操作符=~用來對一個字符串進行正則表達式匹配。如果匹配成功,=~返回第一次匹配成功的位置,否則它返回nil。也就是說,你可以在if和while的條件聲明中使用正則表達式。例如下面的代碼片段,

如果字符串中包含有文本Perl或Python時,輸出一條信息。

puts "Scripting language mentioned: #{line}" if line =~ /Perl|Python/

你能使用Ruby替換所有出現有Perl和Python的地方。

line.gsub(/Perl|Python/, 'Ruby')

從iHower的Ruby on Rails實戰圣經中摘一個示例,用正則表達式抓取手機號碼:

phone = "139-1234-5678"if phone =~ /(/d{3})-(/d{4})-(/d{4})/ start_with = $1 mid_num = $2 end_as = $3end

一般規則(為正常顯示,都放在代碼塊內)

  • /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個字符。/Mrs?/.?/匹配"Mr","Mrs","Mr.","Mrs."。
  • *代表0或多個字符。/Hello*/匹配"Hello","HelloJack"。
  • +代表1或多個字符。/a+c/匹配:"abc","abbdrec"等等。
  • /d{3}/匹配3個數字。
  • /d{1,10}/匹配1-10個數字。
  • /d{3,}/匹配3個數字以上。
  • /([A-Z]/d){5}/匹配首位是大寫字母,后面4個是數字的字符串。

正則表達式操作

String和RegExp均支持=~和match兩個查詢匹配方法:

puts "I can say my name" =~ /name/ #-> 13a = /name/.match("I can say my name, my name I can say") #-> a is MatchDataputs a[0] #-> name

可以看出,如果能夠匹配,=~返回匹配的字符串位置,而match返回一個MatchData對象。如果不匹配,則返回nil。MatchData可以取出其中符合各個子匹配(或子模式)的內容,看下面的例子:

b1=/[A-Za-z]+,[A-Za-z]+,Mrs?/./.match("Jack,Wang,Mrs., nice person")puts b1[0] #-> Jack,Wang,Mrsb2=/(([A-Za-z]+),([A-Za-z]+)),Mrs?/./.match("Jack,Wang,Mrs., nice person:)puts b2[0] #-> Jack,Wang,Mrsputs b2[1] #-> Jack,Wangputs b2[2] #-> Jackputs b2[3] #-> Wang

m[0]返回匹配匹配主表達式的字符串,下面的方法是等同的:m[n]==m.captures[n]

Ruby也自動的為我們填寫一些全局變量,它們以數字做名,$1, $2, 等等,$1包含的是正則表達式中從左側開始的第一對小括號內的子模式所匹配的字符串,以此類推。我們看出匹配時,是從外到內,從左到右的順序。

貪婪量詞和不貪婪量詞

量詞*(表示零個或多個)和+(表示一個或多個)是貪婪的,它們會匹配盡可能多的字符,我們可以在*和+后面加一個?,使它成為非貪婪量詞:

下面代碼是: 1個或多個字符后接一個感嘆號。

teststr="abcd!efg!"match=/.+!/.match(teststr)puts match[0] #-> abcd!efg!limitmatch=/.+?!/.match(teststr)puts limitmatch[0] #-> abcd!

錨是指必須滿座一定的條件,才能繼續匹配:

  • ^???? 行首
  • $???? 行尾
  • /A??? 字符串的開始
  • /z??? 字符串的結尾
  • /Z??? 字符串的結尾(不包括最后的換行符)
  • /b??? 單詞邊界
c=//b/w+/b/.match("!!Stephen**")puts c[0] #-> Stephen

前視斷言

前視斷言表示想要知道下一個指定的是什么,但并不匹配

肯定的前視斷言 (?=)
假設我們想要匹配一個數的序列,該序列以一個圓點結束,但并不想把圓點作為模式匹配的一部分

teststr="123 456 789. 012"m=//d+(?=/.)/.match(teststr)puts m[0] #-> 789

否定的前視斷言 (?!)
上例,如果//d+(?=/.)/改為//d+(?!/.)/,則puts m[0]輸出顯示為 123 。

修飾語

修飾語位于正則表達式最結束正則表達式的正斜杠的后面

1.i使正則表達式對大小寫不敏感
例如,/abc/i可以匹配Abc,abc,ABC等。

2.m使得正則表達式可以和任何字符匹配,包括換行符,通常情況下圓點通配符不匹配換行符。
字符串與正則表達式的相互轉換

字符串內插進正則表達式

teststr="a.c"re=/#{Regexp.escape(teststr)}/puts re.match("a.c")[0] #-> a.ctest=re.match("abc")puts test[0] #-> Nil

正則表達式轉換成字符串

puts /abc/.inspect #-> /abc/

使用正則表達式的常見方法:

  • 用于if和while等
  • 用于gsub、grep等
  • 用于find_all、scan等

例如,puts "test 1 2 and test 3 4".scan(//d/)會輸出["1","2","3","4"]。

以上就是武林技術頻道為各位朋友們介紹的Ruby程序中正則表達式的使用教程,大家可以在上文中獲得非常全面的信息,希望上面的內容,可以為大家提供幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人被黑人巨大进入| 欧美老女人性生活| 日本中文字幕成人| 91久久久久久| 国产精品户外野外| 欧美另类极品videosbest最新版本| 日韩欧美999| 蜜臀久久99精品久久久无需会员| 日韩精品久久久久久久玫瑰园| 亚洲欧洲av一区二区| 久久精品影视伊人网| 久久久精品999| 亚洲精品v天堂中文字幕| 国产精品久久久久久久久久| 亚洲成年人在线播放| 亚洲无限乱码一二三四麻| 国产精品久久久久久超碰| 亚洲最大在线视频| 午夜精品视频在线| 欧美日韩第一视频| 国产精品日韩在线观看| 九九精品视频在线观看| 亚洲国产精久久久久久| 国产91精品久| 91精品国产综合久久久久久久久| 色综合伊人色综合网站| 国产欧美精品日韩精品| 久久精品国产免费观看| 国产色婷婷国产综合在线理论片a| 亚洲精品欧美日韩| 55夜色66夜色国产精品视频| 中文字幕亚洲天堂| 精品亚洲国产视频| 日韩中文有码在线视频| 亚洲图片在区色| 欧美激情亚洲自拍| 91亚洲精品视频| 97国产在线视频| 欧美日韩亚洲成人| 日韩精品在线播放| 欧美亚洲另类激情另类| 国产精品日韩av| 成人午夜在线观看| 欧美最顶级丰满的aⅴ艳星| 日韩欧美精品免费在线| 亚洲香蕉av在线一区二区三区| 国产欧美一区二区白浆黑人| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲级视频在线观看免费1级| 欧美另类99xxxxx| 社区色欧美激情 | 国产精品自拍视频| 久久av在线播放| 日韩美女毛茸茸| 久久av.com| 欧美在线视频一二三| 色综合伊人色综合网站| 亚洲v日韩v综合v精品v| 亚洲免费福利视频| 97超级碰在线看视频免费在线看| 97免费视频在线播放| 亚洲综合中文字幕在线| 亚洲韩国青草视频| 久久久久日韩精品久久久男男| 黄色一区二区三区| 久久久久久久久中文字幕| 国产主播精品在线| 91夜夜揉人人捏人人添红杏| 555www成人网| 日韩免费电影在线观看| 国产精品久久久久秋霞鲁丝| 91美女福利视频高清| 国产欧美精品在线| 精品国产老师黑色丝袜高跟鞋| 91精品国产91久久久久久| 一区二区国产精品视频| 91av中文字幕| 亚洲天堂色网站| 精品久久久91| 亚洲毛片在线观看| 成人做爽爽免费视频| 国产精品入口免费视频一| 亚洲韩国欧洲国产日产av| 国产亚洲免费的视频看| 国产成人欧美在线观看| 国产精品成av人在线视午夜片| 久久久中文字幕| 国产精品久久久久久搜索| 免费av一区二区| 欧美香蕉大胸在线视频观看| 欧美高清视频一区二区| 91久久久久久久久久| 欧美人在线观看| 欧美裸体男粗大视频在线观看| 亚洲国产福利在线| 国产精品电影观看| 尤物yw午夜国产精品视频明星| 国产精品一二区| 98精品在线视频| 中文综合在线观看| 一区二区三区美女xx视频| 国产精品欧美久久久| 亚洲人成人99网站| 精品爽片免费看久久| 国产精品第一视频| 91在线观看免费高清完整版在线观看| 欧美视频一区二区三区…| 九九热99久久久国产盗摄| 在线播放国产一区中文字幕剧情欧美| x99av成人免费| 久久频这里精品99香蕉| 国产偷国产偷亚洲清高网站| 欧美极品少妇xxxxⅹ喷水| 亚洲女人被黑人巨大进入al| 一本大道亚洲视频| 日韩精品在线观| 国产精品九九九| 成人免费看片视频| 在线观看日韩欧美| 亚洲香蕉av在线一区二区三区| 欧美激情亚洲另类| 尤物九九久久国产精品的分类| 精品久久久久久中文字幕大豆网| 91精品国产91久久| 欧美做受高潮电影o| 国产精品视频网站| 亚洲香蕉成人av网站在线观看| 亚洲成色777777在线观看影院| 欧美丰满片xxx777| 国产免费一区二区三区在线能观看| 亚洲一区二区三区在线视频| 中文欧美日本在线资源| 美女av一区二区三区| 国产精品久久久久久av福利| 亚洲肉体裸体xxxx137| 日韩av中文在线| 伊人久久久久久久久久久久久| 欧美主播福利视频| 国产精品自拍小视频| 久久精品国产69国产精品亚洲| 日韩成人中文字幕在线观看| 亚洲成人av在线播放| 日韩精品免费在线| 欧美日韩综合视频网址| 日韩精品中文字幕视频在线| 久久久久久国产精品三级玉女聊斋| 久久久国产成人精品| 一本大道久久加勒比香蕉| 97超碰国产精品女人人人爽| 国产成人涩涩涩视频在线观看| 亚洲香蕉av在线一区二区三区| 亚洲精品美女久久| 久久人人爽人人爽人人片av高请| 这里只有精品在线播放| 8x海外华人永久免费日韩内陆视频| 精品亚洲aⅴ在线观看| 日韩av在线免费| 狠狠色狠色综合曰曰| 亚洲综合av影视| 欧美日本在线视频中文字字幕| 日韩免费精品视频| 国产精品吴梦梦| 国产欧美一区二区三区视频| 黑人巨大精品欧美一区二区三区|