正規表示式2

2013-08-26 12:08
/f(oo|ee)t/  		# 找 foot 或 feet
/it (is|was) a good choice/  # 在句子中用不同的字
/on (March|April|May)/  	# 顯然也可以多個選擇

8.2 比對的字符集合
在Perl中的所有的命名規則都必須以字母或底線作為第一個字元,那麼我們如果要以正規表示式來描述這樣的規則應該怎麼作呢?你總不希望你的樣式表達寫成這個樣子吧?

(/a|b|c|d|.......|z|A|B|C|D|......|_|)

這樣的寫法也確實是太過壯觀了一些。那麼我們應該怎麼減少自己跟其他可能看到這支程式的程式設計師在維護時的負擔呢?Perl提供了一種不錯的方式,也就是以「集合」的方式來表達上面的那個概念。因此剛剛的寫法以集合的方式來表達就可以寫成這樣:
[a-zA-Z_]
很顯然的,有些時候我們希望比對的字元是屬於數字,那麼就可以用[0-9]的方式。如果有需要,你也可以這麼寫[13579]來表示希望比對的是小於10的奇數。
有時候你會遇到一個問題,你希望比對的字元也許是各種標點,也就是你在鍵盤上看到,躲在數字上緣的那一堆字符,所以你想要寫成這樣的集合:
[!@#$%^&*()_+-=]
可是這時候問題就出現了,我們剛剛使用了連字號(-)來取得a-z,A-Z的各個字符,可是這裡有一個[+-=]會變成甚麼樣子呢?這恐怕會產生出讓人意 想不到的結果。所以我們為了避免這種狀況,必須跳脫這個特殊字元,所以如果你真的希望把連字號放進你的字符集合的話,就必須使用(\-)的方式,所以剛剛 的字符集合應該要寫成:
[!@#$%^&*()_+\-=]
另外,在字符集合還有一個特殊字元^,這被稱為排除字元。不過他的效用只在集合的開始,例如像是這樣:
[^24680]
這就表示比對24680以外的字元才算符合。