正则表达式是使用某种模式(pattern)去匹配(matching)一类字符串的一个公式,通常进行查找替换工作.
组成:
它是由一些普通字符和一些元字符(metacharacters)组成.普通字符包括大小写的字母、数字(即所有非元字符),而元字符则具有特殊的含义.
分类:
1、基本的正则表达式 Basic regular expression (BRE)
支持的文本处理工具有如下:
grep 按模式匹配文本
ed 一个原始的行编辑器
sed 一个流编辑器
vim 一个屏幕编辑器
emacs 一个屏幕编辑器
2、扩展的正则表达式 Extended regular expression (ERE)
支持的文本处理工具有如下:
egrep 按模式匹配文本
awk 进行简单的文本处理
组成(一):
用于方括号之外的元字符:
特殊字符 | 含义 | 类型 | 举例 | 说明 |
^ | 匹配首字符 | BRE | ^x | 以字符x开始的字符串 |
$ | 匹配尾字符 | BRE | x$ | 以x字符结尾的字符串 |
. | 匹配任意一个字字符 | BRE | l..e | love, life, live … |
? | 匹配任意一个可选字符 | ERE | xy? | x, xy |
* | 匹配零次或多次重复 | BRE | xy* | x, xy, xyy, xyyy … |
+ | 匹配一次或多次重复 | ERE | xy+ | xy, xyy, xyyy … |
[...] | 匹配任意一个字符 | BRE | [xyz] | x, y, z |
() | 对正则表达式分组 | ERE | (xy)+ | xy, xyxy, xyxyxy, … |
\{n\} | 匹配n次 | BRE | go\{2\}gle | |
\{n,\} | 匹配最少n | BRE | go\{2,\}gle | google, gooogle, goooogle … |
\{n,m\} | 匹配n到m | BRE | go\{2,4\}gle | google, gooogle, goooogle |
{n} | 匹配n | ERE | go{2}gle | |
{n,} | 匹配最少 | ERE | go{2,}gle | google, gooogle, goooogle … |
{n,m} | 匹配n到m | ERE | go{2,4}gle | google, gooogle, goooogle |
| | 以或逻辑连接多个匹 | ERE | good|bon | 匹配 good 或 bon |
\ | 转义字 | BRE | \* | * |
组成(二):
用于方括号之内的元字符:
特殊字符 | 含义 | 类型 | 举例 | 说明 |
^ | 非(仅用于启始字符) | BRE | [^xyz] | 匹配xyz之外的任意一个字符 |
- | 用于指明字符范围(不能是首字符和尾字符) | BRE | [a-zA-Z] | 匹配任意一个字母 |
\ | 转义字符 | BRE | [\.] | . |
其它元字符:
\w 匹配任意一个字母或者数字或下划线,也就是A-Z,a-z,0-9,_中任意一个
\s 包括空格、制表符、换页符等空白字符的其中任意一个
\d 匹配一个数字,0-9中的任意一个;\d+ 匹配一个或更多连续数字;\d{5,12}$ 匹配5-12位的QQ;
\b 匹配单词的开始或结束,和^$有点儿类似。
POSIX字符类:
为了在不同国家的字符编码中保持一致,POSIX增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号 内才能成为正则表达式,如[A-Za-z0-9]或[[:alnum:]]。linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]:文字数字字符
[:alpha:]:文字字符
[:digit:]:数字字符
[:graph:]:非空字符(非空格、控制字符)
[:lower:]:小写字符
[:cntrl:]:控制字符
[:print:]:非空字符(包括空格)
[:punct:]:标点符号
[:space:]:所有空白字符(新行,空格,制表符)
[:upper:]:大写字符
[:xdigit:]:十六进制数字(0-9,a-f,A-F)