正则表达式是使用某种模式(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 google
\{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 google
{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)