gpt4 book ai didi

regex - 字符类中的 Flex 错误负范围

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

我正在使用 Flex 和 Bison 编写一个解析器,并将各种标记定义为:

[0-9]+          { yylval.str=strdup(yytext); return digit; }

[0-9]+\.[0-9]* { yylval.str=strdup(yytext); return floating; }

[a-zA-Z_][a-zA-Z0-9_]* { yylval.str=strdup(yytext); return key; }

[a-zA-Z/][a-zA-Z_-/.]* { yylval.str=strdup(yytext); return string; }

[a-zA-Z0-9._-]+ { yylval.str=strdup(yytext); return hostname; }

["][a-zA-Z0-9!@#$%^&*()_-+=.,/?]* { yylval.str=strdup(yytext); return qstring1; }

[a-zA-Z0-9!@#$%^&*()_-+=.,/?]*["] { yylval.str=strdup(yytext); return qstring2; }

[#].+ { yylval.str=strdup(yytext); return comment;}

[ \n\t] {} /* Ignore white space. */

. {printf("ERR:L:%d\n", q); return ERROR;}

并且它在字符串、qstring1 和 qstring2 的正则表达式中显示错误“字符类中的负范围”。

有人可以帮我解决我哪里出错了吗?

规范是:非引号字符串可以包含 ASCII 字母数字字符、下划线、连字符、正斜杠和句点,并且必须以字母或斜杠开头。

引用的字符串可以在引号之间包含任何字母数字字符。

我采用了两个不同的字符串作为引号字符串,以满足更多规范。

谢谢。

最佳答案

对于 (string, qstring1, qstring2),您需要将连字符 (-) 放置为字符类[]第一个最后字符,或者只是简单地转义它\-(如果在其他地方)。

  • (字符串)

    [a-zA-Z/][a-zA-Z_./-]*
  • (qstring1)

    ["][a-zA-Z0-9!@#$%^&*()_+=.,/?-]*
  • (qstring2)

    [a-zA-Z0-9!@#$%^&*()_+=.,/?-]*["]

关于regex - 字符类中的 Flex 错误负范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416662/

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