如何在lex输入文件中使用正则表达式?

时间:2016-12-05 19:34:30

标签: regex lex

我想使用这个正则表达式(["'])(?:(?=(\?))\ 2。)*?\ 1来自answer to this question

但是当我在lex输入文件中使用它时,如下所示:

DOUBLEQUOTE_CONTENTS(["'])(?:(?=(\?))\ 2。)*?\ 1

%%

{DOUBLEQUOTE_CONTENTS} {printf(" here"); }

我得到了大量未被识别的角色"来自lex的错误。它在第一次窒息?之后的角色和更多。如果我逃脱了?字符,正则表达式不再匹配。

如何在lex输入文件中使用所述正则表达式?

1 个答案:

答案 0 :(得分:1)

(F)lex没有实现前瞻((?=...)和朋友),也没有实现非贪婪的重复(*?)。并且它没有捕获,因此非捕获括号((?:...))是多余的。最后,它没有实现反向引用(\2)。

简而言之,您只能使用非常规则的正则表达式。请参阅flex manual以查看允许的内容。

这是一个简单的模式,它不依赖于前瞻或反向引用:

["]([^"\\]|\\.)*["]|'([^'\\]|\\.)*'