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