我正在编写Flex lexer模式以匹配一系列命令。与subversion的命令行客户端不同,这些命令可以缩短为一个很小但仍然明确的长度。
所以命令如:
MYCOMMAND
可以输入:
MYCOMMAND
MCOMMAND
MYCOM
MC
我一直无知地为这些案例写作的模式如下:
M(Y)?C(O|OM|OMM|OMMA|OMMAN|OMMAND)?
它工作正常,但它的味道非常糟糕,特别是在非常长的定义上,是否有更短的方法来定义这样的匹配?
答案 0 :(得分:2)
如果您可以使用$
或\b
之类的结尾符号,那么您可以这样做:
MY?C(O|$)(M|$)(M|$)(A|$)(N|$)(D|$)
答案 1 :(得分:1)
如何MY?C(O(M(M(A(ND?)?)?)?)?)?
;-)
恕我直言,这是写它的唯一方法。