【发布时间】:2015-02-15 11:54:36
【问题描述】:
航班号有规定(如:CZ3102),2个字符后跟3-4位数字。 它的正则表达式应该是: [A-Z]{2}[0-9]{3,4}。
那么ANTLR4下的lexer规则怎么写?
一个简单的词法分析器规则是: [A-Z][A-Z][0-9][0-9][0-9][0-9]?
但这不是那么优雅,而且如果范围很大,比如 1-255,那么词法分析器规则就不是那么容易了。
谢谢
【问题讨论】:
-
在 ANTLR4 背后使用 java 正则表达式。所以也许像this 这样的东西会起作用。
-
@GiovanniBotta 您的说法与事实相去甚远。 ANTLR 4 使用带有按需 DFA 缓存的 NFA 模拟的自定义实现。在 ANTLR 4 运行时的任何地方都没有引用 Java 的正则表达式实现,更不用说词法分析器实现本身了。
-
哇,我简直不敢相信,我检查了 github repo。基本上没有引用 java.util.regex。接得好!不幸的是,我找不到 ANTLR4 正则表达式的参考。我以前有这本书,但我现在没有了,所以我无法确认它在里面。
-
我猜this 是一个开始。
-
那么,小伙伴们,如何解决我的问题呢?或者使用非贪心机制:[A-Z]+?[0-9]+?
标签: antlr4