regex - 如何在 LEX/FLEX 中编写非贪婪匹配?

标签 regex lex flex-lexer

我正在尝试使用 FLEX 和 BISON 解析遗留语言(类似于“C”)。除了匹配字符串之外,一切都运行良好。

这种相当奇怪的遗留语言不支持在字符串文字中引用字符,因此以下都是有效的字符串文字:

"hello"
""
"\"

我使用以下规则来匹配字符串文字:

\".*\"            { yylval.strval = _strdup( yytext ); return LIT_STRING; }

不幸的是,这是一个贪婪匹配,因此它匹配如下代码:

"hello", "world"

作为单个字符串(hello", "world)。

通常的非贪婪量词 .*? 似乎在 FLEX 中不起作用。有什么想法吗?

最佳答案

只是禁止在引号之间使用引号。

\"[^"]*\"

关于regex - 如何在 LEX/FLEX 中编写非贪婪匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4166194/

相关文章:

c++ - Qt 解析自定义文件格式

java - 正则表达式捕获重复单词(文本中超过 1 2 个重复)

flex-lexer - 在 lex 中,如何区分 '-'(减法)运算符和整数 '-3' ?

thread-safety - 使用 Flex 编写可重入词法分析器

c - Bison 中缀计算器的计算结果始终为 0

特定数字的正则表达式

c - 如何在不创建临时文件的情况下从 char * 创建 FILE*

c++ - 如何从 boost::spirit::lex 标记确定行/列号?

c - 什么时候使用解析器生成器是可行的?

javascript - 允许正则表达式中的数字包括负数