Next: subpattern 與其他, Previous: 匹配多種 pattern, Up: 使用正規表示式 [Contents]
先來細講一下字元集合 ‘[]’ 。 基本上只要把想匹配到的字元寫進 ‘[]’ 裡即可,但複雜一點的字元集合這樣寫會很痛苦。 比如我們想匹配英文字母,直接寫就是把整整 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 。