Flex регулярное выражение не соответствует должным образом - PullRequest
0 голосов
/ 08 июня 2011

В моем файле токенайзера (.lex) я хочу найти следующий шаблон:

AaBC12/awD41/dfs21 etc...

Я написал это правило

[A-Za-z]+[A-Za-z0-9]*[[/]+[A-Za-z][A-Za-z0-9]*]* 
{lline = cpflineno;cpflval.str = strdup(cpftext);return K_IDENTIFIER;}

Это правило мне кажется правильным, ноесли у меня есть такой ввод:

TOP/MD1 
TOP/MD2
TOP/MD2/D/E

Мой вывод

TOP/MD1
TOP/MD2
TOP/MD2
/D/E  

вместо

TOP/MD1
TOP/MD2
TOP/MD2/D/E

Не могли бы вы сказать мне, где мое правило не выполняется?

1 Ответ

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

Как насчет этого:

[A-Za-z]+[A-Za-z0-9]*([/]+[A-Za-z][A-Za-z0-9]*)* 

Заменить [] на (), где вы имеете в виду группу.

Обратите внимание, что она будет соответствовать foo////bar, если вы этого не хотитеудалите второй + (и первый + в этом отношении, в этом случае он бесполезен).

...