我在網站上有相關線索(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」規則。謝謝! –