完整的正则表达式由两种字符构成。
特殊字符(special characters)称为元字符(metacharacters)。
其它为字面字符(literal),或者普通文本字符(normal text characters)。
^匹配行的开头。$匹配行的结尾。
[...]
在字符组内部,字符组元字符(character-class metacharacter)连字符'-',表示一个范围。
只有在字符组内部,连字符才是元字符。但是如果连字符出现在字符组的开头,那也不是元字符。
点号和问号在字符组内部也不是元字符。
排除型字符组
[^...]
.
点号匹配除换行符之外的任何字符。egrep按行处理,\n在处理时被删除了。所以点号实际上匹配任何字符。
|
如 Bob|Robert
子表达式称为多选分支 alternative
多选结构可以包含很多字符,但是不能超越括号的界限
gr(a|e)y
一个字符组只能匹配目标文本中的单个字符。
多选结构自身可能都是完整的正则表达式,可以匹配任意长度的文本。
字符组算是独立的微型语言,(例如,对于元字符,有自己的规定)。
有的egrep不支持。
\< 匹配单词的开头
\> 匹配单词的结尾
<和>本身不是元字符。只有当它们和斜线结合起来时,整个序列才具有特殊意义。
这叫做元字符序列 metasequences。
?
匹配0次或一次。
+ 一次或多次
* 任意多次
? 0次或1次
这3个元字符,统称为量词 quantifiers
区间量词
{min,max}
在很多流派 flavor的正则表达式中,括号能记住它们包含的子表达式匹配的文本。
\1 \2 表示匹配的第n个括号内的文本。
1 2 3 4 | $ egrep '(a)\1' - ab caa caa |
如上,匹配aa
反斜杠接一个元字符,元字符被当成普通字符。
但是反斜杠接的不是元字符,如\< \> \1,那其意义就依版本而定。
subexpression
包括括号内的表达式,或者多选分支。单个普通字符也算是子表达式。
量词作用的是前面紧邻的子表达式。mis+pell,+作用的是s,而不是mis或者is。
Perl和很多其它流派的正则表达式提供支持
\t 制表符
\n 换行符
\r 回车符
\s 任何空白字符
\S \s之外的任何字符
\w [a-zA-Z0-9]
\W \w之外的任何字符
\d [0-9]
\D \d之外的任何字符