gpt4 book ai didi

regex - 如何在flex中匹配一串流浪字符(不匹配其他正则表达式)?

转载 作者:行者123 更新时间:2023-12-03 08:28:16 25 4
gpt4 key购买 nike

我正在尝试使用flex制作一个简单的词法分析器,该工具可以读取整数,并且如果发现不构成整数的任何字符,则应打印不匹配字符的字符串。
如果模式匹配,这些是我与C代码一起使用的模式。

{INT}({DEL}|{ENTER}) { return INT;}   
{ENTER} { printf("#End of line\n");}
{DEL}
<<EOF>> { printf("#End of file#\n"); exit(0);}
. { printf("Unrecognized characters: %s\n",yytext);
fprintf(yyout, "Unrecognized characters: %s\n",yytext);}
我的问题是,当我使用 .时,词法分析器一次匹配一个字符。但是,如果我使用 .+,则词法分析器会将所有内容与整数匹配,并将所有内容视为错误。
如果我应该显示更多代码,请告诉我。我将举一个示例,说明我从词法分析器获得的输出以及想要的输出。
输入文件示例:

23 55

12asd

@213


使用 .时的示例输出文件:

token=INT, value="23"

token=INT, value="55

Unrecognized characters: 1

Unrecognized characters: 2

Unrecognized characters: a

Unrecognized characters: s

Unrecognized characters: d

Unrecognized characters: @

token=INT, value="213"


使用 .+时的示例输出文件:

Unrecognized characters: 23 55

Unrecognized characters: 12asd

Unrecognized characters: @213


所需的输出:

token=INT, value="23"

token=INT, value="55

Unrecognized characters: 12asd

Unrecognized characters: @213

最佳答案

我终于找到了问题的答案。

问题在于.包含空格和制表符。因此,当使用.+时,它将吃掉所有内容以及制表符和空格,并将每一行都视为错误。可能是因为。+提供了更长的匹配时间。

[^ \t\n]+({DEL}|{ENTER})



此正则表达式将读取除空格以外的所有内容,直到读取空格为止。但是,如果 [^ \t\n]+的内容为INT,则它将不是要匹配的正则表达式。 INT将被匹配,因为它具有更高的优先级。

关于regex - 如何在flex中匹配一串流浪字符(不匹配其他正则表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com