простой вопрос регулярного выражения - PullRequest
0 голосов
/ 05 июня 2011

Как сопоставить aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab, где число должно быть минимум 10?

Я имею в виду, я знаю так:

[a][a][a][a][a][a][a][a][a][a][a][a][a]a*b

Но должен быть лучший изящный метод, где, если мое минимальное число a станет, скажем, 100 ..

Что это? Я пытаюсь сопоставить (a ^ n) b, где n может быть чем угодно

EDIT:

Я забыл упомянуть, что это делается с использованием lex и yacc .. где lex должен вернуть токен yacc.

%{
#include "y.tab.h"
%}
%%
aaaaaaaaaa[a]*b {return ok;}
\n {return '\n';}
. {return 0;}
%%

Ответы [ 4 ]

7 голосов
/ 05 июня 2011

Попробуйте

a{10,}

, который говорит a 10 или более раз.

grep -E "a{10,}" filename

соответствует aaaaaaaaaaaaaaaaaaaaaaaaab, но не aaaaaaaaab.

2 голосов
/ 07 июня 2011

Если ваш lex равен flex , вы можете использовать a{10,}.

Если не так, то согласно 3. Лекс Регулярные выражения , вы можете использовать a{10}a* вместо.

1 голос
/ 05 июня 2011

Footy,

[ПРЕДУПРЕЖДЕНИЕ: Этот ответ полный BUNKUM !!!]

(если вы имеете в виду футбол, мы заклятые враги; -)

Ммм, Нет ... Это не так, насколько я знаю, использование "стандартного" синтаксиса регулярных выражений, поддерживаемого sed, grep, nawk и тому подобным ... инет, даже не egrep ... Насколько я знаю, синтаксис a{10,*} (а это именно то, чего вы жаждете) не появился, пока Perl не переписал все книги о возможностях регулярных выражений ... и (не цитируйте меня об этом) Я не думаю, что это произошло до версии 5.

Так что, да, если вы застряли с использованием nawk, то это чувак aaaaaaaardardking hardway.Извините.

Ура.Кит.


РЕДАКТИРОВАТЬ:

Хммм ... Я, кажется, странный человек здесь ... может быть, когда-либо-elses "стандартные операциисреда (среды) "были обновлены" стандартными инструментами ", которые распознают более поздние расширения синтаксиса регулярных выражений ... Ооооо ... Хммм ... Я проверял это на моей (трехлетней) реализации cygwin egrep ... и это меня удивило, когда я действительно работал !!!

Administrator@snadbox3 ~
$ egrep 'a{3,}b' <<-eof
> ab
> aab
> aaab
> aaaab
> eof
aaab
aaaab

Так что Я НЕПРАВИЛЬНО все заканчивается ... выглядит как "новый синтаксис {min,[max]} достаточно хорошо поддерживается, и я старею.Вздох.

Ура.Кит.

0 голосов
/ 05 июня 2011

используйте этот формат: a^na*b и замените n на любое число.

...