简单的正则表达问题

时间:2011-06-05 07:25:32

标签: regex unix yacc lex

如何匹配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;}
%%

4 个答案:

答案 0 :(得分:7)

尝试

a{10,}

表示a 10次或更多次。

grep -E "a{10,}" filename

匹配aaaaaaaaaaaaaaaaaaaaaaaaab但不匹配aaaaaaaaab

答案 1 :(得分:2)

如果您的lexflex,则可以使用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替换为您想要的任何数字。