关于正则表达式一问

关于正则表达式一问

正则表达式中的*指代的是之前的一个字符的多次重复,可是下面这个正则表达式:

b[cq]*e居然可以配上bbbeee,这是为什么啊?那三个e是怎么来的?多出来的两个b又是怎么来的?

我是这样测试的
echo "bbbeee" > regex
grep b[cq]*e regex
打出来是:
bbbeee

不懂了,请教高手解释.      
*不是重复,而是任意

echo bbbeee | grep b[cq]*e 相当于
echo bbbeee | grep b*e
匹配的是以b开头以e结尾

版主,对吧      
[nc@nc c]$ cat test.c
bbbeee,
bcqe
bbccqqee
bcqqqe
bcccqe
sbccqqqee
bccc
bbc
bqb
bbqqq
[nc@nc c]$ grep "b[cq]\{1,3\}" test.c
bcqe
bbccqqee
bcqqqe
bcccqe
sbccqqqee
bccc
bbc
bqb
bbqqq
匹配 1 至 3 次, 去掉 3 就是 + 的意思了

参考一下这里:
http://www.linuxeden.com/forum/s ... &threadid=98008      
[QUOTE]最初由 ServerOnly 发布
[B]*不是重复,而是任意

echo bbbeee | grep b[cq]*e 相当于
echo bbbeee | grep b*e
匹配的是以b开头以e结尾

版主,对吧 [/B][/QUOTE]非也.
* 表示匹配前一个 pattern 的 0 次或者多次.
echo bbbeee | grep 'b[cq]*e' 的结果这样理解: 由于 [cq]* 匹配 0 个或多个 [cq], 因此肯定会匹配到 be, 即 bbbeee      
一定要注意 0 次匹配的情形      
如果想要1到任意次,请用+      
或者用大括号{1,}      
[QUOTE]最初由 ServerOnly 发布
[B]*不是重复,而是任意

echo bbbeee | grep b[cq]*e 相当于
echo bbbeee | grep b*e
匹配的是以b开头以e结尾

版主,对吧 [/B][/QUOTE]
汗。。。这不是dos....      
[QUOTE]最初由 xiaoyafeng 发布
[B]如果想要1到任意次,请用+ [/B][/QUOTE]

上面的例子中,这样并不会得到结果:
[nc@nc c]$ grep "b[cq]+" test.c
不明白 :confused:      
grep 不支持扩展正则表达式你用大括号那种