[root@localhost shell]# echo 1123|grep -Po '1|12|123'
1
1
[root@localhost shell]# echo 1123|grep -Eo '1|12|123'
1
123
[root@localhost ~]# echo jwefaabfwef| grep -Eo "aab|aa"
aab
[root@localhost ~]# echo jwefaabfwef| grep -Eo "aa|aab"
aab
[root@localhost ~]# echo jwefaabfwef| grep -Eo "aab?"
aab
[root@localhost ~]# echo jwefaabfwef| grep -PEo "aab?"
grep: conflicting matchers specified
[root@localhost ~]# echo jwefaabfwef| grep -Po "aab?"
aab
[root@localhost ~]# echo jwefaabfwef| grep -Po "aab|aa"
aab
[root@localhost ~]# echo jwefaabfwef| grep -Po "aa|aab"
aa
-o选项会进行多轮匹配
后边一轮匹配是在前一轮匹配后剩下的字符串
二个都是NFA,不过是二种nfa,
grep -E是posix 扩展正则,
grep -P是perl正则,
只要是nfa,都有刚才潜挺说的贪婪特性
不过贪婪不完全能解释这个问题
还是要多不同程序的正则处理算法上来考虑
perl正则是传统nfa,在多选结构上(再强调下呵,是在多选结构上)是有顺序特性的,左边起,匹配了就结束了
posix正则,对于多选结构(再强调下,是多选结构),就算左边匹配了,还会把能匹配的最长选项匹配出来
阅读(1500) | 评论(0) | 转发(0) |