我想使用这个正则表达式(["'])(?:(?=(\?))\ 2。)*?\ 1来自answer to this question
但是当我在lex输入文件中使用它时,如下所示:
DOUBLEQUOTE_CONTENTS(["'])(?:(?=(\?))\ 2。)*?\ 1
%%
{DOUBLEQUOTE_CONTENTS} {printf(" here"); }
我得到了大量未被识别的角色"来自lex的错误。它在第一次窒息?之后的角色和更多。如果我逃脱了?字符,正则表达式不再匹配。
如何在lex输入文件中使用所述正则表达式?
答案 0 :(得分:1)
(F)lex没有实现前瞻((?=...)
和朋友),也没有实现非贪婪的重复(*?
)。并且它没有捕获,因此非捕获括号((?:...)
)是多余的。最后,它没有实现反向引用(\2
)。
简而言之,您只能使用非常规则的正则表达式。请参阅flex manual以查看允许的内容。
这是一个简单的模式,它不依赖于前瞻或反向引用:
["]([^"\\]|\\.)*["]|'([^'\\]|\\.)*'