全部博文(245)
分类:
2008-05-17 09:12:48
在上一节里我们用一个例子介绍了什么是正则表达式的“元字符”。其实,元字符是一个或一组代替个或多个字符的字符。听起来有点拗口,但举一个例子也许你就明白了:元字符*用来匹配一个或多个的前一字符;而元字符 . 用来匹配一个任意的一个字符。正则表达式也可以不使用任何的元字符,一个简单的字符串 /piano/ (在Unix里正则表达式通常用一对斜线作为分隔符,后文在“正则表达式格式”部分中有介绍)也是一个正则表达式,只不过是准确匹配罢了。
下面列出了常用的正则表达式元字符,下一节将以实例的形式逐个介绍这些元字符的用法。需要注意的是,这些元字符并不是在所有的Unix (或Linux) 工具中都可以用,至于某个应用程序支持哪些元字符,可以参照该工具的用户手册。
表2.1 正则表达式元字符
元字符 |
功能 |
示例 |
匹配结果 |
^ |
行首定位符 |
/^supinfo/ |
匹配所有以supinfo开头的行 |
$ |
行尾定位符 |
/supinfo$/ |
匹配所有以supinfo结尾的行 |
\< |
词首定位符 |
/\<supinfo/ |
匹配出现以supinfo为开头的词的行 |
\> |
词尾定位符 |
/supinfo\>/ |
匹配出现以supinfo为结尾的词的行 |
. |
匹配一个字符 |
/su…fo/ |
包含su,后面紧跟三个任意字符,然后紧跟着fo的行 |
* |
匹配0个或多个前一字符 |
/_*supinfo/ |
supinfo前有0个或多个下划线的行 |
[] |
匹配一组字符里的任意字符 |
/[Ss]pinfo/ |
包含Supinfo或supinfo的行 |
[x-y] |
匹配指定范围内的字符 |
/[A-Z0-9]supinfo/ |
supinfo之前有一个A到Z或0到9的字符 |
[^ ] |
匹配不在指定范围内的字符 |
/[^A-Z0-9]supinfo/ |
supinfo之前有一个既不是A到Z又不是0到9的字符 |
x\{m\} x\{m,\} x\{m, n\} |
根据字符x出现的次数匹配: m次;大于等于m次;大于等于m次但小于等于n次 |
/s\{2,5\}/ |
匹配有2到5个连续出现的s的行 |
\ |
转义元字符 |
/supinfo\. / |
匹配包含supinfo,然后后面紧跟一个句点的行(没有 \ 的时候是匹配一个字符) |
\(…\) |
创建一个字符标签 |
/(SUPINFO):use \1NE/ |
括号中的字符被保存在标号为1的标签里,以后可以用\1来引用。标签编号从左到右依次为1,2,3……最多可以有9个标签。这个例子查找的是SUPINFO:后面跟着一个 use SUPINFONE的字符串 |
还有一点问题需要在这里提出,正则表达式有很多版本——至少存在两个版本:基本正则表达式和扩展正则表达式。在基本正则表达式中,原字符 | ,+ 和 ? 是不允许使用的。并且在使用含有圆括号和花括号的正则表达式时,圆括号和花括号都要用反斜线转义。在书写正则表达式时,比较好的做法是先写出整个正则表达式,然后再用反斜线将需要转义的字符转义。
正则表达式的格式
在Unix 中,正则表达式是被包含在一对斜线中的,斜线之间包含要匹配的字符(模式)。下面是几个例子:
/piano/ /[Pp]iano/ /*pinfo/ /s\{2,5\}oho/