gpt4 book ai didi

lex - Lex 中的操作可以访问各个正则表达式组吗?

转载 作者:行者123 更新时间:2023-12-03 02:09:07 30 4
gpt4 key购买 nike

Lex 中的操作可以访问各个正则表达式组吗?

(注意:我猜不是,因为组字符 - 括号 - 是根据 documentation 用于更改优先级的。但如果是这样,您是否推荐可以执行此操作的替代 C/C++ 扫描仪生成器?我不太热衷于编写自己的词法分析器。)

示例:

假设我有以下输入:foo [tagName attribute="value"] bar,我想使用 Lex/Flex 提取标签。我当然可以写这个规则:

\[[a-z]+[[:space:]]+[a-z]+=\"[a-z]+\"\]       printf("matched %s", yytext);

但是假设我想访问字符串的某些部分,例如属性,但不必再次解析 yytext (因为字符串已经被扫描过,所以再次扫描它的一部分并没有什么意义)。所以像这样的东西会更好(正则表达式组):

\[[a-z]+[[:space:]]+[a-z]+=\"([a-z]+)\"\]     printf("matched attribute %s", $1);

最佳答案

您可以将其分开以启动条件。像这样的事情:

%x VALUEPARSE ENDSTATE
%%
char string_buf[100];
<INITIAL>\[[a-z]+[[:space:]]+[a-z]+=\" {BEGIN(VALUEPARSE);}
<VALUEPARSE>([a-z]+) (strncpy(string_buf, yytext, yyleng);BEGIN(ENDSTATE);} //getting value text
<ENDSTATE>\"\] {BEGIN(INITIAL);}
%%

关于替代的 C/C++ 扫描仪生成器 - 我使用 QT 类 QRegularExpression 来做同样的事情,它可以很容易地在匹配后获取正则表达式组。

关于lex - Lex 中的操作可以访问各个正则表达式组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6885260/

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