我在网站上有相关线索(My lex pattern doesn't work to match my input file, how to correct it?)我可以在lex代码中指定模式匹配优先级吗?
我遇到的问题是关于“greedy”lex如何进行模式匹配,我有我的lex文件:
$ cat b.l
%{
#include<stdio.h>
%}
%%
"12" {printf("head\n");}
"34" {printf("tail\n");}
.* {printf("content\n");}
%%
我想说的是,当遇到“12”时,打印“头”;当遇到“34”时,打印“尾巴”,否则打印“内容”为不包含“12”或“34”的最长匹配。
但事实是,“。*”是一个贪婪的匹配,无论我输入什么,它都会打印“内容”。
我的要求是,当我使用
12sdf2dfsd3sd34
为输入,输出应该是
head
content
tail
所以似乎还有就是2点可能的方式:
1,To s规定匹配优先级为“。*”,只有在“12”和“34”都不匹配时才能工作。 lex支持“优先”吗?
2,更改第三个表达式,以匹配任何不包含“12”或“34”子字符串的连续字符串。但是如何写这个正则表达式呢?
这确实满足我的要求,只是改变了“12”规则是像你的“34”规则。谢谢! –