11.2
基础正规表示法
既然正规表示法是处理字符串的一种表示方式,那么
对字符排序有影响的语系数据就会对正规表示法
的½果有影响
此外,正规表示法也需要支持工具程序来辅助才行!所以,我们这里就先½绍一个
最简单的字符串撷取功能的工具程序,那就是
grep
啰!
前一章已经½绍过
grep
的相关选项与参数,
本章着重在½½½的
grep
选项说明啰!
½绍完
grep
的功能之后,就½入正规表示法的特殊字符的
处理能力了。
11.2.1
语系对正规表示法的影响
为什么语系的数据会影响到正规表示法的输出½果呢?我们在
第零章计算器概论的文字编码系统
面谈到,文件其实记录的½有
0
1
,我们看到的字符文字与数字都是透过编码表转换来的。由于
不同语系的编码数据并不相同,所以就会造成数据撷取½果的差异了。
举例来说,在英文大小写的
编码顺序中,
zh_TW.big5
C
这两种语系的输出½果分别如下:
.
LANG=C
时:
0 1 2 3 4 ... A B C D ... Z a b c d ...z
.
LANG=zh_TW
时:
0 1 2 3 4 ... a A b B c C d D ... z Z
上面的顺序是编码的顺序,我们可以很清楚的发现这两种语系明显就是不一样!如果你想要撷取大写
字符而使用
[A-Z]
时,
会发现
LANG=C
确实可以½捉到大写字符
(
因为是连续的
)
,但是如果
LANG=zh_TW.big5
时,就会发现到,
连同小写的
b-z
也会被撷取出来!因为就编码的顺序来看,
big5
语系可以撷取到『
A b B c C ... z Z
』这一堆字符哩!
所以,
使用正规表示法时,需要特别留
意当时环境的语系为何,
否则可能会发现与别人不相同的撷取½果
喔!
由于一般我们在练习正规表示法时,使用的是兼容于
POSIX
的标准,因此就使用『
C
』这个语系
(
1
)
因此,
底下的很多练习都是使用『
LANG=C
』这个语系数据来½行
的喔!
另外,为了要
避免这样编码所造成的英文与数字的撷取问题,因此有些特殊的符号我们得要了½一下的!
这些符
号主要有底下这些意义:
(
1
)
特殊符号
代表意义
[:alnum:]
代表英文大小写字符及数字,亦即
0
-
9, A
-
Z, a
-
z
[:alpha:]
代表任何英文大小写字符,亦即
A
-
Z, a
-
z
[:blank:]
代表空格键与
[Tab]
按键两者
[:cntrl:]
代表键盘上面的控制按键,亦即包括
CR, LF, Tab, Del..
等等
[:digit:]
代表数字而已,亦即
0
-
9
[:graph:]
除了空格符
(
空格键与
[Tab]
按键
)
外的其他所有按键
[:lower:]
代表小写字符,亦即
a
-
z
[:print:]
代表任何可以被打印出来的字符