如何匹配a的数量应该是10分钟的aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?
我的意思是我知道这种方式:
[a][a][a][a][a][a][a][a][a][a][a][a][a]a*b
但是必须有一个更优雅的方法,如果我的最小数量变为100 ...
这是什么?我试图匹配(a ^ n)b类似于n可以是任何东西的东西
修改
我忘了提到这是使用lex和yacc来完成的..其中lex必须将一个令牌返回给yacc。
%{
#include "y.tab.h"
%}
%%
aaaaaaaaaa[a]*b {return ok;}
\n {return '\n';}
. {return 0;}
%%
答案 0 :(得分:7)
尝试
a{10,}
表示a
10次或更多次。
grep -E "a{10,}" filename
匹配aaaaaaaaaaaaaaaaaaaaaaaaab
但不匹配aaaaaaaaab
。
答案 1 :(得分:2)
如果您的lex
是flex,则可以使用a{10,}
。
如果不是这样,根据
3. Lex Regular Expressions
,您可以改为使用a{10}a*
。
答案 2 :(得分:1)
无足轻重,
[警告:这个答案是完整的BUNKUM !!!]
(如果你的意思是足球,我们就是贪婪的敌人; - )
嗯,没有 ......这不是我所知道的,使用sed,grep,nawk等喜欢的“标准”正则表达式语法......而且没有甚至没有egrep ...据我所知,a{10,*}
语法(这正是你所渴望的)直到Perl重写了关于正则表达式功能的所有书籍才出现...... (不要引用我这个)我认为这不会发生在版本5之前。
所以是的,如果你坚持使用nawk,那么这就是aaaaaaaaardardarkarking hardway dude。遗憾。
干杯。基思。
修改强>
嗯......我似乎在这里是个奇怪的人......也许永远不会有“标准操作环境”用“标准工具”更新,这些工具可以识别后来的正则表达式语法扩展。 Sooo ......嗯......我在 cygwin egrep 的实施中对此进行了测试......实际工作让我感到惊讶!
Administrator@snadbox3 ~
$ egrep 'a{3,}b' <<-eof
> ab
> aab
> aaab
> aaaab
> eof
aaab
aaaab
所以我错了所有结果......看起来“新”{min,[max]}
语法得到了相当好的支持,而且我已经老了。叹息。
干杯。基思。
答案 3 :(得分:-1)
使用以下格式:a^na*b
并将n替换为您想要的任何数字。