如何匹配未定义的内容

时间:2018-05-31 19:26:33

标签: regex jflex

如果我定义了类似的东西

COMMAND         = "HI" | "HOW" | "ARE" | "YOU" 

我怎么说“如果你匹配的东西不是一个命令”?...

我试过这个

[^COMMAND]

但是没有用..

2 个答案:

答案 0 :(得分:0)

据我所知,(当前)JFlex是不可能的。

我们需要一个有效的tempered negative lookahead((?!bad).)*

在JFlex中有两种方法可以做出否定前瞻:

  • 前瞻中的否定:x / !(y [^]*)(如果在前瞻中没有跟y,则匹配x。)
  • 使用否定元素的前瞻:x / [^y]|y[^z](匹配,如果x后跟一些东西是!a或a!b。

否则,您可以从此答案中获得一些想法(特别是外观替代方案):https://stackoverflow.com/a/37988661/8291949

答案 1 :(得分:0)

好吧,你可以匹配其他任何东西,然后

COMMAND         = "HI" | "HOW" | "ARE" | "YOU" 
. {throw new RuntimeException("Illegal character: <" + yytext() + ">");}