2013-01-26 4 views
1

Мне нужно написать регулярное выражение для программы flex, где он находит повторяющиеся символы и отклоняет их, например, он одобряет ABD, но не ABDA или AABD, потому что в выражении повторяется «A». Это заставляет меня ударить головой уже неделю, заблаговременно за ваше время.Отменить повторный символ в lex

+0

Я изменил свой тег «гну-Flex», потому что «гибкий» тег используется для платформы Apache Flex. – weltraumpirat

ответ

1

Если в случае нечувствительны:

.*(A.*A|B.*B|C.*C|D.*D|E.*E|F.*F|G.*G|H.*H|I.*I|J.*J|L.*L|M.*M|N.*N|O.*O|P.*P|Q.*Q|R.*R|S.*S|T.*T|U.*U|V.*V|X.*X|Y.*Y|W.*W|Z.*Z).* 
+0

Спасибо за ваш ответ, но, к сожалению, он не работает, он находит только постоянные символы ex. AAGD отклонен, но одобрен AGDA (чего я не хочу) –

+0

'. * (A. * A | B. * B | C. * C | D. * D | E. * E | F. * F | GG | HH | II | J | | L | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | –

+0

Ничего себе! Оно работает! Большое спасибо! Но возникла другая проблема (моя ошибка не упоминать об этом), как мне заставить ее печатать сообщение, если оно одобряет слово? Чтобы было проще, я пишу [ABCDEFGHIJKLMNOPQRSTUVXYZ] + printf («сообщение»); и под этим. * (A. * A | B. * B | C. * C | D. * D | E. * E | F. * F | GG | HH | II | JJ | LL | MM | NN | OO | PP | QQ | RR | SS | TT | UU | VV | X X | YY | WW | ZZ). * Printf («сообщение»); но он не «видит» первое правило аппроксимации:/ –

-1

соответствует любому символу, а затем тот же матч, как и в скобках: /(.)\1/

Edit: это соответствует только постоянные письма. используйте /(.).*\1/ для всех матчей.

+0

ОК, поэтому я пишу что-то вроде этого ??? -> /(.)\1/ printf ("% s: reject", yytext); –

+0

Это недопустимый синтаксис в flex или lex: http://flex.sourceforge.net/manual/Patterns.html#Patterns http://dinosaur.compilertools.net/lex/index.html – nhahtdh

Смежные вопросы