正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式。
grep:最初是ED编辑器中的一条命令,用来显示文件中特定的内容,后来成为一个独立的工具grep.
egrep:扩展的grep.
POSIX:可移植操作系统接口(Portable Operating System Interface of Vnix);
Perl:实际抽取和汇报语言(Practical Extraction and Reporting Language)
PCRE:这是兼容Perl正则表达式的一套正则引擎,其他开发人员可以将PCRE整合到自己的语言中,为用户提供丰富的正则功能。
一个完整的正则表达式由两部分构成,元字符和文本字符。
元字符就是具有特殊含义的字符,前面提到的"*"和"?".文本字符就是普通的文本,如字母和数字等。
PCRE风格的正则表达式一般都放在定界符"/"中间。
1.行定位符(^和$)
行定位符就是用来描述字串的边界。"^"表示行的开始,"$"表示行的结尾。
^tm 匹配以字符串开头的tm。
2.单词定界符(\b,\B)
匹配一个完整的单词:\btm\b
还有一个大写的\B,意思和\b相反。她匹配的子串不能是一个完整的单词,而是其他单词或子串的一部分。
\Btm\B
3.字符类([ ])
正则表达式是区分大小写的,如果要忽略大小写可使用方括号表达式"[ ]".只要匹配的字符出现在方括号内,即表示匹配成功。一个方括号只能匹配一个字符。
[Tt][Mm]
POSIX风格的预定义字符类
[:digit:] ------- 十进制数字结合,等同于[0-9]
[[:alnum:]] ----- 字母和数字的集合,等同于[a-zA-Z0-9]
[[:alpha:]] ------ 字母集合,等同于[a-zA-Z]
[[:blank:]] ------- 空格和制表符
[[:xdigit:]] ------- 十六进制数字
[[:puntc:]] ------- 特殊字符集合。包括键盘上所有的特殊字符
[[:print:]] -------- 所有的可打印字符(包括空白字符)
[[:space:]] ------ 空白字符(空格,换行符,换页符,回车符,水平制表符)
[[:upper:]] ------- 所有大写字母,[A-Z]
[[:lower:]] ------- 所有小写字母,[a-z]
[[:cntrl:]] --------- 控制字符
4.选择字符(|)
还有一种方法可以实现上面字符类的匹配模式,就是使用选择字符(|)
T|tM|m
使用"[]"和使用"|"的区别在于"[]"只能匹配单个字符,而"|"可以匹配任意长度的字符串
5.连字符(-)
变量的命名规则只能以字母和下划线开头。
[a-z]
6.排除字符([^])
[^a-zA-Z]:不以字母和下划线开头的变量名。
7.限定符(?* + {n,m})
对于这类重复出现字母或子串,可以使用限定符来实现匹配。
? ----- 匹配前面的字符零次或一次 ----- colou?r,该表达式可以匹配colour和color
+ ----- 匹配前面的字符一次或多次 ----- go+gle,该表达式可以匹配的范围从gogle到goo...gle
* ------ 匹配前面的字符零次或多次 go*gle,该表达式可以匹配的范围从ggle到goo..gle
{n} ---- 匹配前面的字符n次 go{2}gle,该表达式只匹配google
{n,} ---- 匹配前面的字符最少n次,go{n,}gle,该表达式可以匹配的范围从google到goo..gle
{n,m} -- 匹配前面的字符最少n次,最多m次,employe{0,2},该表达式可以匹配employ,employe,和employee3种情况。
8.点号字符(.)