Next: , Previous: , Up: 使用正規表示式   [Contents]


3.6.2.4 字元集合

先來細講一下字元集合 ‘[]’ 。 基本上只要把想匹配到的字元寫進 ‘[]’ 裡即可,但複雜一點的字元集合這樣寫會很痛苦。 比如我們想匹配英文字母,直接寫就是把整整 26 個字母寫出來,考慮大小寫甚至要寫 52 個字母。 每次要匹配英文字母都要這樣也太累了吧。 因此可以用 ‘[a-z]’ 這樣的寫法來表示小寫的 26 個字母,它的意思是指從 ASCII 碼 a 到 z 的字元。 關於 ASCII 碼是什麼,還請自行 google。 總之如果不熟 ASCII 碼,那英文字母的字元集合最好寫成 ‘[a-zA-Z]’ ,至少我們知道同樣的大小寫一定是連續的編碼。 如果寫 ‘[a-Z]’ 和 ‘[A-z]’ 這兩個結果可是不一樣的,這是因為在 ASCII 碼中 a 比 A 還大,所以第二種寫法才會匹配到英文字母。 就我所知,在 ‘[]’ 中除了 ‘-’, ‘^’, ‘]’, ‘\’ 之外,其他的字元都是正常的意思。 ‘^’ 如果放在 ‘[]’ 最前面的話,代表整個字元集合會反轉,也就是說 ‘[^’ ⟨ set ⟩ ‘]’ 代表 ⟨ set ⟩ 以外的字元所成的字元集合。 比如 ‘[^a-zA-Z]’ 代表英文字母以外的字元所成的集合,或是可以想成不會匹配到英文字母。 如果要將 ‘-’, ‘^’, ‘]’, ‘\’ 包含在字元集合裡的話,一個作法是用 ‘\’ 跳脫字元,即寫成 ‘\-’, ‘\^’, ‘\]’, ‘\\’ 。 或是, ‘^’ 不要放最前面, ‘-’, ‘]’ 放最前面( 如果 ‘^’ 在最前面,就放在 ‘^’ 之後 )。

再來講幾個一般正規表示式提供的預設字元集合,需要用 ‘[ [:’ ⟨ SetName ⟩ ‘:] ]’ 或簡寫來描述,下面是個簡表

集合名稱對應的 ‘[]’ 寫法簡寫
‘[ [:alpha:] ]’‘[a-zA-Z]’‘\a’
‘[^a-zA-Z]’‘\A’
‘[ [:alnum:] ]’‘[a-zA-Z0-9]’
‘[ [:digit:] ]’‘[0-9]’‘\d’
‘[^0-9]’‘\D’
‘[ [:lower:] ]’‘[a-z]’‘\l’
‘[^a-z]’‘\L’
‘[ [:upper:] ]’‘[A-Z]’‘\u’
‘[^A-Z]’‘\U’
‘[\ \t]’‘\s’
‘[^\ \t]’‘\S’
‘[_a-zA-Z0-9]’‘\w’
‘[^_a-zA-Z0-9]’‘\W’

上面是我覺得會比較常用到的,如果要詳細的內容可以 :help character-classes 。