首页 > 解决方案 > 用ANTLR分析包含单引号的引号之间的字符串

问题描述

我希望能够用 ANTLR4 解析像“test'test”这样的字符串

我的语法:

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

我的解析器:

matcher: STRING;

在另一篇文章中,提出了以下可能性: 在 ANTLR4 中处理单引号和双引号字符串的范围

语法 :

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

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

但是,这种可能性会在维护期间产生冗余并因此产生风险

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

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

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

标签: antlr4

解决方案


不,("|').*?(\1)不可能。我也不会这样做.*?,但像这样:

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

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

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

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


推荐阅读