更简洁的正则表达式匹配字符串的可选部分

时间:2011-04-04 14:33:42

标签: regex bison flex-lexer

我正在编写Flex lexer模式以匹配一系列命令。与subversion的命令行客户端不同,这些命令可以缩短为一个很小但仍然明确的长度。

所以命令如:

MYCOMMAND

可以输入:

MYCOMMAND
MCOMMAND
MYCOM
MC

我一直无知地为这些案例写作的模式如下:

M(Y)?C(O|OM|OMM|OMMA|OMMAN|OMMAND)?

它工作正常,但它的味道非常糟糕,特别是在非常长的定义上,是否有更短的方法来定义这样的匹配?

2 个答案:

答案 0 :(得分:2)

如果您可以使用$\b之类的结尾符号,那么您可以这样做:

MY?C(O|$)(M|$)(M|$)(A|$)(N|$)(D|$)

答案 1 :(得分:1)

如何MY?C(O(M(M(A(ND?)?)?)?)?)? ;-)
恕我直言,这是写它的唯一方法。