我正在尝试通过通配符
确保文本中至少包含一个字符fragment CHARACTER : ('a'..'z'|'0'..'9'|'-'|'&'|'@'|'$'|'%'|'.'|':');
fragment WILDCARD_QUESTION : ('?');
WILD_STRING
: (CHARACTER)*
(
(WILDCARD_QUESTION)
(CHARACTER)*
)+;
使用这个甚至一个?在我希望它失败的地方被接受。因此,只有至少应该传递一个字符的序列。
我需要的是a?
,?a
,?a?
,a?a
等。只有?
,??
等应该失败。即应该至少有一个角色,而不仅仅是WILDCARD_QUESTION。该字符可以位于通配符的两侧。
答案 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)*
;
这似乎解决了这个问题。