【ruby學習筆記】正則表達式

如果熟悉其他的某種編程語言,對正則表達式應該都不會陌生。正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器裏,正則表達式通常被用來檢索、替換那些符合某個模式的文本。

在ruby中正則表達式是在字符串處理中的必備良品,現在記錄一些基礎的概念和用法。

在ruby中,正則表達式使用//(兩個斜槓)包裹起來的,一個最簡單的例子:

"xyz".scan(/./){ |letter| puts letter }

輸出的是

x

y

z

scan方法就是根據提供的正則表達式去掃描整個字符串。首先看這個/./,是用//(兩個斜槓)包裹起來的,這裏的.(點)是個匹配單個字符的通配符,所以這裏這個表達式的意思是單個匹配字符,但後打印出來。

上面說的.(點)是個正則表達式的元字符,類似的還有

\w:匹配字母或數字或下劃線或漢字

\W:匹配所有\w不能匹配的內容

\d:匹配數字

\D:匹配所有\d不能匹配的內容

大寫的W和D真是有趣而任性的設定,我們發現可以用(\w\W)或者(\d\D)匹配任意單個字符。

其實這種正則表達式的元字符還有很多,本文重點討論在ruby中的使用,介紹一些ruby中匹配正則表達式的方法,其他的一些元字符就請讀者查閱其他資料吧。

上面介紹了scan方法,下面介紹一個運算符:=~,這個運算符的結果是一個布爾值,看字符串和正則表達式是否能匹配,例子:

<span style="font-family:SimSun;font-size:18px;">puts "String has vowels" if "Hello world" =~ /[aeiou]/ </span>

輸出是:String has vowels

含義是,"Hello world"和正則表達式/[aeiou]/ 去匹配,如果能匹配上,表達式結果就是true,反之就是false。

另一個重要的方法是match,match方法返回一個匹配上的字符串數組,樣例:

x = "This is a test".match(/(\w+) (\w+)/)
puts x[0]
puts x[1]
puts x[2]

輸出的是:

This is

This

is

返回x數組中,第1個元素(下標爲0)是匹配到的字符串,x[1]就是匹配第一個(\w+)的字符串,x[2]就是匹配第二個(\w+)的字符串。

match方法另外一個重要的好處是,它接受的參數未必是一個正則表達式,可以是一個正則表達式格式的字符串,這樣如果這個正則表達式是外部輸入或者文件讀入時就很方便,可以直接當成字符串處理,以下2行代碼輸出的結果是一樣的:

puts "String has vowels" if "Hello world".match(/[aeiou]/) 
puts "String has vowels" if "Hello world".match("[aeiou]")


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章