Chinaunix首页 | 论坛 | 博客

分类:

2008-05-17 09:12:48


在上一节里我们用一个例子介绍了什么是正则表达式的“元字符”。其实,元字符是一个或一组代替个或多个字符的字符。听起来有点拗口,但举一个例子也许你就明白了:元字符*用来匹配一个或多个的前一字符;而元字符 . 用来匹配一个任意的一个字符。正则表达式也可以不使用任何的元字符,一个简单的字符串 /piano/ (在Unix里正则表达式通常用一对斜线作为分隔符,后文在“正则表达式格式”部分中有介绍)也是一个正则表达式,只不过是准确匹配罢了。

下面列出了常用的正则表达式元字符,下一节将以实例的形式逐个介绍这些元字符的用法。需要注意的是,这些元字符并不是在所有的Unix (Linux) 工具中都可以用,至于某个应用程序支持哪些元字符,可以参照该工具的用户手册。

 

2.1 正则表达式元字符

 

元字符

功能

示例

匹配结果

^

行首定位符

/^supinfo/

匹配所有以supinfo开头的行

 

$

行尾定位符

/supinfo$/

匹配所有以supinfo结尾的行

 

\<

词首定位符

/\<supinfo/

匹配出现以supinfo为开头的词的行

 

\>

词尾定位符

/supinfo\>/

匹配出现以supinfo为结尾的词的行

 

.

匹配一个字符

/sufo/

包含su,后面紧跟三个任意字符,然后紧跟着fo的行

 

*

匹配0个或多个前一字符

/_*supinfo/

supinfo前有0个或多个下划线的行

 

[]

匹配一组字符里的任意字符

 

/[Ss]pinfo/

包含Supinfosupinfo的行

[x-y]

匹配指定范围内的字符

/[A-Z0-9]supinfo/

supinfo之前有一个AZ09的字符

 

[^ ]

匹配不在指定范围内的字符

/[^A-Z0-9]supinfo/

supinfo之前有一个既不是AZ又不是09的字符

 

x\{m\}

x\{m,\}

x\{m, n\}

根据字符x出现的次数匹配:

m次;大于等于m次;大于等于m次但小于等于n

 

/s\{2,5\}/

匹配有25个连续出现的s的行

\

转义元字符

/supinfo\. /

匹配包含supinfo,然后后面紧跟一个句点的行(没有 \ 的时候是匹配一个字符)

 

\(\)

创建一个字符标签

/(SUPINFO):use \1NE/

括号中的字符被保存在标号为1的标签里,以后可以用\1来引用。标签编号从左到右依次为123……最多可以有9个标签。这个例子查找的是SUPINFO:后面跟着一个 use SUPINFONE的字符串

 

还有一点问题需要在这里提出,正则表达式有很多版本——至少存在两个版本:基本正则表达式和扩展正则表达式。在基本正则表达式中,原字符 | + ? 是不允许使用的。并且在使用含有圆括号和花括号的正则表达式时,圆括号和花括号都要用反斜线转义。在书写正则表达式时,比较好的做法是先写出整个正则表达式,然后再用反斜线将需要转义的字符转义。

正则表达式的格式

Unix 中,正则表达式是被包含在一对斜线中的,斜线之间包含要匹配的字符(模式)。下面是几个例子:

/piano/ /[Pp]iano/            /*pinfo/               /s\{2,5\}oho/

阅读(2351) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~