egrep或者grep -E与grep相比进行文本匹配的时候使用的扩展的正则表达式,那么扩展的正则表达式与正则表达式有什么区别呢?
1基本的正则表达式:
字符匹配:
.: 任意单个字符
[]: 某一字符集中的单个字符 例如[0-9]表示任意个位数
[^]:不属于某一字符集中的单个字符 例如[^[:space:]]表示任意非空白字符
次数匹配:
*:任意次
\?: 0或1次
\{m,n\}:至少m次,至多n次;
.*: 任意长度的任意字符
锚定:
^: 行首锚定
$: 行尾锚定
\<, \b:词首
\>, \b:词尾
元组引用:
\(\)
\1, \2, \3, ...
====================================================================================
2.扩展的正则表达式
字符匹配:
.
[]
[^]
次数匹配:
*: 匹配前面的字符任意多次
?: 匹配前面的字符0次或者1次
+: 匹配其前面的字符至少1次
{m,n} 匹配前面的字符至少m次,至多n次 注意:与基本正则表达式相比 不需要再转义
位置锚定:
^ 行首
$ 行尾
\< 或者\b ### 词首
\> 或者 ###\b 词尾
元组:
():元组 注意 :与基本正则表达式相比,不需要再转义
\1, \2, \3, ...
或者
|: or
注意:这是扩展正则表达式才有的功能 若要grep支持,必须用grep -E
注意: 用于选择的内容必须加入到括号中
(C|c)at: Cat或cat
C|cat :C 或者cat
由比较可知,基本正则表达式与扩展正则表达式的区别在于
1.次数匹配上,扩展正则表达式多了一个+代表匹配前面的字符至少一次 相当于\{1,\}
2.扩展正则表达式{m,n}不再需要转转义
3.扩展正则表达式的分组()也不再需要转义
4.正则表达式多了一个或者|
那么我们在文本模式匹配的时候可以考虑使用扩展的正则表达式,从而避免使用过多的转义字符\