1.只有腳本語(yǔ)言才會(huì )內建Regular Expressions ,Regular Expression 是一個(gè)用于匹配的模版(pattern),匹配對象是String
2.Regular Expression 用于處理與文本有關(guān)的工作
3.使用//建立Regular Expression,例如:/pattern/
4.注意,我要告訴你:Regular Expression 是 an object!
5.pattern為A or B的時(shí)候,使用/A|B/,例如 /perl|python/,注意,這里也可以寫(xiě)為 /P(erl|ython)/
6.正如上面說(shuō)描述的,Regular Expression可以使用(),同時(shí),它也可以使用算術(shù)表達式,當然所謂的算術(shù)表達式只是形式上帶上算法運算符號,而不含有運算的意義,具體的意義被特殊定義了,下面引用《ruby users guide》中的說(shuō)明:
正則表達式中有很多上述的具有特別意義的字符。首先是下列字符。 [ ] 范圍描述符。[a-z]表示從a到z之間的任意一個(gè)。
----------------------------------------------------------------------------------------
\w 英文字母和數字。即[0-9 A-Z a-z]。 \W 非英文字母和數字 \s 空字符,即[\t\n\r\f]。 \S 非空字符。 \d 數字,即[0-9]。 \D 非數字。 \b 詞邊界字符(在范圍描述符外部時(shí)) \B 非詞邊界字符 \b 退格符(0x08)(在范圍描述符內部時(shí))
----------------------------------------------------------------------------------------
以上的表示一個(gè)字符
* 前面元素出現0次以上 (用于字符后) + 前面元素出現1次以上 (用于字符后) {m,n} 前面元素最少出現m次,最多出現n次 (用于字符后) ? 前面元素出現0次或1次 (用于字符后) | 選擇 ( ) 群組 其他字符 該字符本身
-----------------------------------------------------------------------------------------
*注意我前面提到的概念,Regular Expressions 是用于匹配字符串的,上面材料中提到:“元素”,其實(shí)也就是一個(gè)字符了
這里有必要做一個(gè)說(shuō)明:
ruby里面上表的比如 \s 等被稱(chēng)之為:character classes,下面詳細說(shuō)幾個(gè),希望大家能舉一反三
1)\s 表示了一個(gè)空字符,比如\n,\t,\r這樣的轉義字符(注意我要澄清大家的一個(gè)概念性問(wèn)題,\n和a,b,c一樣是一個(gè)字符)
2)\d表示任何一個(gè)整數,比如 /\d\d:\d\d:\d\d/ # a time such as 12:34:56
3)\w可以表示數字,注意是數字,而不是整數,確切的說(shuō)是數字字符和英文字符
4)補充一個(gè)上面沒(méi)有的 “.” 表示沒(méi)有或者所有的字符串,注意是字符串
7.使用Regular Expressions
匹配操作符為: =~
比如 p =~ /a/ 這里 =~會(huì )返回一個(gè)值,這個(gè)值是a在p中的位置,如果沒(méi)有a就返回nil,注意當a出現在p的第一個(gè)位置的時(shí)候,=~返回0,if 0 ,ruby認為是真,這里和c/c++有所不同和java也不同,要注意。另外,所有比較運算,運算符都會(huì )返回一個(gè)值,用于在條件判斷中控制程序流。
8.Regular Expressions使用舉例
p = ‘a(chǎn)hibcd‘
line=0
if line=(p=~/hi/)
puts line
end
結果為:1
用Regular Expressions 實(shí)現查找替換的功能:
line.sub(/Perl/, ‘Ruby‘) # replace first ‘Perl‘ with ‘Ruby‘
line.gsub(/Python/, ‘Ruby‘) # replace every ‘Python‘ with ‘Ruby‘
line.gsub(/Perl|Python/, ‘Ruby‘) # replace every occurrence of Perl and Python with Ruby