1.8正则表达式
基本正则表达式_basic_REsBRE
扩展正则表达式_extended_REs或 EREs
- 正则表达式Regular Expressions应用范围
- 字符串匹配操作和替换操作
- 举例:UNIX中的vi more pg grep yacc lex awk
- 其他:Turbo Pascal/Visual C/Word等等
- 正则表达式的功能
- 描述一个字符串模式
- 注意
- 正则表达式规则与文件名通配符规则不同
- 正则表达式规则用于文本处理的场合
- 文件名匹配规则用于文件处理的场合
- 不同软件对正则表达式的定义可能会有些不同
- 正则表达式规则与文件名通配符规则不同
【基本法则】
. 匹配任意单个字符
.表示.本身 \逃逸符
- 匹配其前面的字符任意次可为0次
.* 任意长度的任意字符
\? 匹配其前面字符1次或0次
x{m}:匹配其前面的字符“x”m次(精确匹配)
x{m,}:匹配其前面的字符“x”至少m次
x{m,n}:匹配其前面的字符“x”至少m次,至多n次
{1,} 1次至无上限 {0,3}至少3次
^ 锚定行首,此字符后面的任意内容必须出现在行首
$ 锚定行尾,次字符前面的任意内容必须出现在行尾
^$表示空行
[ ] 匹配指定范围内的任意单个字符
\< 其后面的任意字符必须作为单词的首部出现 \b
\> 其前面的任意字符必须作为单词的尾部出现 \b
\<\> 锚定单词例如 \<root\>
纯数字 [[:digit:]]或[0-9]
小写字母 [[:lower:]]或[a-z]
大写字母 [[:upper:]]或[A-Z]
大小写字母 [[:alpha:]]或[a-zA-Z]
数字加字母 [[:alnum:]]或[0-9a-zA-Z]
空白字符 [[:space:]] 非空白字符[:space:]
标点符号 [[:punct:]]
\d 匹配任何十进制数,相当于[0-9] -P选项加上
\D 匹配任何非数字字符,相当于0-9 -P选项加上
\s 匹配任何空白字符,
\S 匹配任何非空白字符,
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
\W 匹配任何非字母数字字符,相当于a-zA-Z0-9
\ 匹配"\"
( ) 分组后项引用 \1 引用第一个左括号以及与之对应的右括号所包括的所有内容。 \2 \3 …
扩展正则表达式中增加了几个与正则表达式有区别的新内容:
- 匹配其前面的字符至少1次 {1,}正则中近似
? 匹配紧挨在其前面的字符0次或1次 \?正则中
{m,n} 匹配前面字符至少m次至多n次 {1,}表示1至无限 {0,3}表示0-3
()分组 \1 \2 \3 …
| 或者
1.8.1特殊符号
- 6个元字符
- . * [ \ ^ $
- 其它字符与其自身匹配
- 转义
- 用反斜线可以取消特殊字符的特殊含义。
- 如:正则表达end.只与字符串end.匹配
- 长的正则表达式由单字符正则表达式构成的
- 非特殊字符与其自身匹配
如:a与a,b与b
- 转义字符(\)
. * $ \^ [ \
- 圆点(·)
匹配任意单字符
- 集合表示
在一对方括号之间的字符为集合的内容,如:单字符正则表达式[abcd]与a或b,c,d匹配
- 圆点,星号,反斜线在方括号内时,代表它们自己
如:[*.]可匹配3个单字符
- 用减号-定义一个区间
如[a-d] [A-Z] [a-zA-Z0-9]
- 减号在最后,则失去表示区间的意义
[ad-]只与3个字符匹配
- 用^表示补集: ^在开头,则表示与集合内字符之外的任意字符匹配
如:a-z匹配任一非小写字母
^不在开头,则失去其表示补集的意义
如:[a-z^]能匹配27个单字符
- 正则表达式的组合详见
- 串结
如abc, [A-Z].[0-9]·
- 星号(*)
单字符正则表达式后跟*,匹配此单字符正则表达式的0次或任意多次出现
例:正则表达式12*4
与字符串1234不匹配,与1224,12224,14匹配
例: 正则表达式[A-Z][0-9]*
此例中*作用的单字符正则表式为[0-9],代表
[A-Z]
[A-Z][0-9]
[A-Z][0-9][0-9]
[A-Z][0-9][0-9][0-9],等等
与A,A1,C45,D768匹配,与b64512,T56t不匹配
- $ 在尾部时有特殊意义,否则与其自身匹配
例:123$ 匹配文件中行尾的123,不在行尾的123字符不匹配
例:$123与字符串$123匹配
例:.$ 匹配行尾的任意字符
- ^ 在首部时有特殊意义,否则与其自身匹配
例:^printf匹配行首的printf字符串,不在行首的printf串不匹配
例:Hel^lo与字符串Hel^lo匹配
例:在vi中使用 :10,50s/^//g
删除10-50行的每行行首的4个空格