ANTLR3:确保角色至少出现在一个地方

时间:2011-06-09 16:16:38

标签: antlr antlr3

我正在尝试通过通配符

确保文本中至少包含一个字符
fragment CHARACTER : ('a'..'z'|'0'..'9'|'-'|'&'|'@'|'$'|'%'|'.'|':'); 
fragment WILDCARD_QUESTION  : ('?'); 

WILD_STRING 
   : (CHARACTER)* 
     ( 
       (WILDCARD_QUESTION) 
       (CHARACTER)* 
     )+;

使用这个甚至一个?在我希望它失败的地方被接受。因此,只有至少应该传递一个字符的序列。

我需要的是a??a?a?a?a等。只有???等应该失败。即应该至少有一个角色,而不仅仅是WILDCARD_QUESTION。该字符可以位于通配符的两侧。

2 个答案:

答案 0 :(得分:1)

使用两个规则,一个用于领导WILDCARD,一个用于领导CHARACTER:

WILD_STRING : (WILDCARD_QUESTION)+ CHARACTER (CHARACTER | WILDCARD_QUESTION)*
            | (CHARACTER)+ WILDCARD_QUESTION (CHARACTER | WILDCARD_QUESTION)*
            ;

答案 1 :(得分:0)

将代码更改为

    WILD_STRING 
       : (((WILDCARD_QUESTION)+(CHARACTER))|((CHARACTER)+(WILDCARD_QUESTION)))
(WILDCARD_QUESTION|CHARACTER)*
       ; 

这似乎解决了这个问题。