这篇文章收集了我学习正则表达式过程中遇到的一些问题,因此将逐步更新。
1) 正则表达式中的字符* 可以用来代表任意(0或多个)字符,如“o*”代表的是“拥有空字符或一个 o 以上的字符”。
所以匹配一个以上o,要使用这样的表达式“oo*”。匹配两个以上o,使用“ooo*”,以此类推。可见“oo*”中的第二个o与*是一体的,表示匹配0个或多个o。
这里稍微解释几句。o*匹配0个或多个o,因为0个o也在匹配的范围内,所以要匹配1个以上o,就要在前面再加个o,变成oo*。
2) 表示以.结尾的行,.前要用/解除其特殊意义。
grep -n '/.$' regular_expression.txt
3) .*表示什么?
. 表示任意一个字符;*表示任意0个或者多个字符。一次.*表示0个或多个任意字符。
4) 找出任意数字。道理和1)中解释的一样,[0-9]实际上匹配一个字符,它必须是一个数字。
grep -n '[0-9][0-9]*' regular_express.txt
还有一个例子:
grep -n 'g[ld]' regular_express.txt
搜寻含有 (gl) 或 (gd) 的那一行。
5) 扩展正则表达式
egrep是grep -E的别名,它支持扩展正则表达式(RE)。
5.1)+ 重复一个或者一个以上的前一个RE字符
例:egrep -n 'go+d' regular_expression.txt
匹配god,good,goood,...
5.2)? 零个或一个前一个RE字符
例:egrep -n 'go?d' regular_expression.txt
匹配gd,god两个字符串
5.3)(|)用或的方式查找多个字符串
例:egrep -n 'g(la|oo)d' regular_expression.txt
匹配glad或者good
egrep -n 'A(xyz)+C' regular_expression.txt
匹配AxyzxyzxyzxyzC,A和C之间有一个或多个xyz