使用ANTLR分析包含单引号的引号之间的字符串

时间:2019-04-10 09:49:36

标签: antlr4

我希望能够解析“ test'test”之类的字符串  使用ANTLR4

我的语法:

QUOTE: ('\''|'"');
STRING: QUOTE .*? QUOTE;

我的解析器:

matcher: STRING;

在另一篇文章中,提出了以下可能性: Handling scope for single and double quote strings in ANTLR4

语法:

SQUOTE: '\'';
DQUOTE: '"';

STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE );

但是,这种可能性会造成冗余,并因此在维护过程中带来风险

这就是为什么我想知道是否有可能找到正则表达式的等效项:

("|').*?(\1)

也就是说,自动搜索与开始标签相同类型的结束标签

1 个答案:

答案 0 :(得分:1)

否,("|').*?(\1)是不可能的。我也不会这么做,.*?就是这样:

STRING
 : '"' ~["]* '"'
 | '\'' ~[']* '\''
 ;

或者,如果您允许转义字符:

STRING
 : '"' ( ~["]* | '\\' . )* '"'
 | '\'' ( ~[']* | '\\' . ) '\''
 ;

还要注意,~["]*也与换行符匹配。如果您不希望这样做,请执行以下操作:~["\r\n]*