У меня есть файл lex, и я пытаюсь разобрать его код. Например, у меня есть что-то вроде этого:yytext соответствует концу регулярного выражения
...
%%
COMMENT ("(^"|"/^")(.|\n)*("^)"|"^/")
%%
{COMMENT} printf("comment: %s\n", yytext);
[.]* printf("other: %s\n", yytext);
%%
...
и в этом случае входной
(^^^^^^^^^
this is a comment
^)
function(arg);
sometext
выводит:
comment: (^^^^^^^^^
this is a comment
^)
function(arg)
other: ;
sometext
и т.д. Таким образом, он соответствует ")", но не "^)", и это не соответствует следующему увиденному "^" ", а последнему из файла. При вызове lex у меня нет параметров или аргументов командной строки. Я уверен, что это как-то связано с тем, как я использую буквальное совпадение строк, но я не могу понять это.
У меня была работа с тестовым сайтом http://regexr.com/39gl2 с шаблоном \ (\ * (. \\ n) *? \ * \), Однако, с lex, похоже, нет эффект. Я не вижу, как (. | \ N) * и (. | \ N) *? все равно. –
В lex это не так.Я не знаю регекса «тестовый сайт», который понимает синтаксис lex, но вы можете подойти ближе, выбрав синтаксис Posix, если он доступен. В lex (и вообще) '. *' Соответствует максимально возможной последовательности, а не последовательности до «следующего совпадения». – rici