简要表达式
- 一个正则表达式是一个字符串,字符串里的字符被称为元字符,它们可能表示了比字面上看起来的意思更丰富的含义
一个正则表达式包含一个或多个项:
- 一个字符集,这里的字符集的字符表示的就是它们字面上的意思,正则表达式最简单的情况就是仅仅由字符集组成,没有其他的元字符;
- 锚:一个锚指明了正则表达式在一行文本中要匹配的位置,例如^和$就是锚。
- 修饰符:它们用于展开或缩小(即是修改了)正则表达式匹配文本行的范围,修饰符包括了* ,(), \
正则表达式的主要作用是用来文本搜索和字符串操作,一个正则表达式匹配一个字符或是一串字符
-
- –*-- 匹配前一个字符的任意多次(包括0次)
- . --.-- 匹配除了换行符之外的任意一个字符
- 脱字符 ^ ,–^-- 匹配一行的开头,但依赖于上下文环境,可能在正则表达式中表示否定一个字符集的意思;
- $ , –KaTeX parse error: Expected group after '^' at position 17: …-在正则表达式中匹配行尾, '^̲’ 匹配空行
- [] ,–[…]-- 在正则表达式中表示匹配括号中的一个字符;[xyz],匹配字符x,y或z,[c-n],匹配从字符c到n之间的任意一个字符,[B-Pk-y]匹配从B到P从k到y的任意一个字符;[a-z0-9]匹配任意小写字母或数字,[^b-d]匹配除了从b到d范围内所有的字符,这是正则表达式中反转或取否的一个例子;(就好像在别的情形中!字符所扮演的角色)
- 反斜杠 ---- 转义(escapes)一个特殊的字符,使这个字符表示原来字面上的意思;
- 转义尖角号 --<…> 用于表示单词的边界,尖角号必须被转义,因为不这样的话就表示单纯字面的意思,<the>,匹配单词"the",但是不匹配them,there,other等;
确定正则表达式能否工作的唯一方法是测试它
扩展的正则表达式.增加了一些元字符到上面提到的基本的元字符集合中,它们在egrep,awk,perl中使用;
- 问号 – ? – 匹配零或一个前面的字符,它一般用于匹配单个字符;
- 加号 – + – 匹配一个或者多个前面的字符,它的作用和*很相似,但唯一的区别是它不匹配0个字符的情况;
***匹配字符串 ***
GNU版本的sed和awk可以使用"+",但是需要转义
1.echo 1222qqqww | sed -ne '/12\+q\+w\+/p'
1222qqqww
2.echo 1222qqqww | gawk '/12+q+w+/'
1222qqqww
3.echo 1222qqqww | grep '12\+q\+w\+'
1222qqqww
- 转义”大括号“ – {} – 指示前面正则表达式匹配的次数,要转义是因为不转义的话只是表示他们字面上的意思,这个用法只是技巧上的而不是基本正则表达式的内容;列如:"[0-9]{5}",精确匹配5个数字;
大括号不能在”经典“(不是posix兼容)的正则表达式版本的awk中使用,然而gawk有一个选项–re-interval来允许使用大括号(不必转义)
echo 222 | gawk --re-interval '/2{3}/'
2222
perl和一些egrep 版本不要求转义大括号
- 圆括号 --()–括起一组正则表达式,它和"1" 操作符或在用expr进行子字符串提取一起使用很有用
- 竖线 – | – "或"正则操作符用于匹配一组可选的字符
egrep 're(a|e)d' xxx
POSIX字符类. [:class:]这是另外一个可选的用于指定匹配字符范围的方法
- [:alnum:] 匹配字母和数字,等同于A-Za-z0-9
- [:alpha:] 匹配字母,等同于A-Za-z
- [:blank:] 匹配一个空格或是一个制表符(tab)
- [:cntrl:] 匹配控制字符
- [:digit:] 匹配(十进制)数字,等同于0-9
- [:graph:] (可打印的图形字符)匹配ASCLL码值的33-126之间的字符,和[:print:]一样,但是不包括空格字符
- [:lower:] 匹配小写字母,等同于a-z
- [:print:] (可打印的字符)。匹配 ASCII码值32-126之间的字符,和[:graph:],但是增多一个空格字符;
- [:space:] 匹配空白字符(空格符和水平制表符)
- [:upper:] 匹配大写字母,等同于A-Z。
- [:xdigit:] 匹配十六进制数字,等同于0-9A-Fa-f
POSIX字符类一般都要求用双方括号double brackets([[ ]])引起来