Lookahead断言(正则表达式)在JFlex中不起作用

时间:2012-09-24 22:50:42

标签: java regex jflex

我正在尝试使用JFlex生成扫描仪。

我试图实现的语法的一个标识符规则如下(在正则表达式语法中):

[a-zA-Z]((_(?!_)|[a-zA-Z0-9])*[a-zA-Z0-9])?

我已经验证上面的表达式实际上是有效的并且有效。但是,似乎jFlex 1.4.3不喜欢我使用前瞻断言(?!_),因为它一直在抱怨“问号”。有没有我做错了或者在JFlex中使用前瞻有什么不同?

我使用“ lookahead ”来满足规则,即我不能在标识符名称中连续两个下划线。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

而不是

[a-zA-Z]((_(?!_)|[a-zA-Z0-9])*[a-zA-Z0-9])? 

使用优化模式

[a-zA-Z]+(_[a-zA-Z0-9]+|[a-zA-Z0-9]+)*