ILD

正则表达式1
作者:YUAN JIANPENG 邮箱:yuanjp@hust.edu.cn
发布时间:2018-8-16 站点:Inside Linux Development

完整的正则表达式由两种字符构成。

特殊字符(special characters)称为元字符(metacharacters)。

其它为字面字符(literal),或者普通文本字符(normal text characters)。


1 Egrep元字符


1.1 行的起始和结束

^匹配行的开头。$匹配行的结尾。


1.2 字符组 Character Classes

[...]

在字符组内部,字符组元字符(character-class metacharacter)连字符'-',表示一个范围。


只有在字符组内部,连字符才是元字符。但是如果连字符出现在字符组的开头,那也不是元字符。


点号和问号在字符组内部也不是元字符。


排除型字符组

[^...]


1.3 匹配任何字符

.

点号匹配除换行符之外的任何字符。egrep按行处理,\n在处理时被删除了。所以点号实际上匹配任何字符。


1.4 多选结构 Alternation

如 Bob|Robert

子表达式称为多选分支 alternative


多选结构可以包含很多字符,但是不能超越括号的界限

gr(a|e)y


一个字符组只能匹配目标文本中的单个字符。

多选结构自身可能都是完整的正则表达式,可以匹配任意长度的文本。

字符组算是独立的微型语言,(例如,对于元字符,有自己的规定)。


1.5 单词分界符

有的egrep不支持。

\< 匹配单词的开头

\> 匹配单词的结尾


<和>本身不是元字符。只有当它们和斜线结合起来时,整个序列才具有特殊意义。

这叫做元字符序列 metasequences。


1.6 可选项元素

匹配0次或一次。


1.7 重复出现

+ 一次或多次

* 任意多次

? 0次或1次

这3个元字符,统称为量词 quantifiers


区间量词

{min,max}


1.8 括号及反向引用

在很多流派 flavor的正则表达式中,括号能记住它们包含的子表达式匹配的文本。


\1 \2 表示匹配的第n个括号内的文本。

1
2
3
4
egrep '(a)\1' -
ab
caa
caa

如上,匹配aa


1.9 转义

反斜杠接一个元字符,元字符被当成普通字符。


但是反斜杠接的不是元字符,如\< \> \1,那其意义就依版本而定。


1.10 子表达式

subexpression

包括括号内的表达式,或者多选分支。单个普通字符也算是子表达式。


量词作用的是前面紧邻的子表达式。mis+pell,+作用的是s,而不是mis或者is。


2 简记法

Perl和很多其它流派的正则表达式提供支持

\t 制表符

\n 换行符

\r 回车符

\s 任何空白字符

\S \s之外的任何字符

\w [a-zA-Z0-9]

\W \w之外的任何字符

\d [0-9]

\D \d之外的任何字符


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.