为什么语系的资料会影响到正规表示法的输出结果呢?举例来说,在英文大小写的编码顺序中,zh_TW.big5及C这两种语系的输出结果分别如下:
- LANG=C 时:0 1 2 3 4 ... ABCD ... Z abcd ...z
- LANG=zh_TW 时:0 1 2 3 4 ... a A b B c C d D ... z Z
上面的顺序是编码的顺序,我们可以很清楚的发现这两种语系明显就是不一样!如果你想要撷取大写字元而使用[AZ]时,会发现LANG=C确实可以仅捉到大写字元(因为是连续的) ,但是如果LANG=zh_TW.big5时,就会发现到,连同小写的bz也会被撷取出来!因为就编码的顺序来看, big5语系可以撷取到『 A b B c C ... z Z 』这一堆字元哩!所以,使用正规表示法时,需要特别留意当时环境的语系为何,否则可能会发现与别人不相同的撷取结果喔!
由于一般我们在练习正规表示法时,使用的是相容于POSIX的标准,因此就使用『 C 』这个语系另外,为了要避免这样编码所造成的英文与数字的撷取问题,因此有些特殊的符号我们得要了解一下的!这些符号主要有底下这些意义:
特殊符号 | 代表意义 |
[:alnum:] | 代表英文大小写字元及数字,亦即0-9, AZ, az |
[:alpha:] | 代表任何英文大小写字元,亦即AZ, az |
[:blank:] | 代表空白键与[Tab] 按键两者 |
[:cntrl:] | 代表键盘上面的控制按键,亦即包括CR, LF, Tab, Del.. 等等 |
[:digit:] | 代表数字而已,亦即0-9 |
[:graph:] | 除了空白字元(空白键与[Tab] 按键) 外的其他所有按键 |
[:lower:] | 代表小写字元,亦即az |
[:print:] | 代表任何可以被列印出来的字元 |
[:punct:] | 代表标点符号(punctuation symbol),亦即:" ' ? ! ; : # $... |
[:upper:] | 代表大写字元,亦即AZ |
[:space:] | 任何会产生空白的字元,包括空白键, [Tab], CR 等等 |
[:xdigit:] | 代表16 进位的数字类型,因此包括: 0-9, AF, af 的数字与字元 |