我希望能够用ANTLR4解析像“test'test”这样的字符串
我的语法:
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)
是不可能的。我也不会做.*?
,但是这样的话:
STRING
: '"' ~["]* '"'
| '\'' ~[']* '\''
;
或者,如果您允许转义字符:
STRING
: '"' ( ~["]* | '\\' . )* '"'
| '\'' ( ~[']* | '\\' . ) '\''
;
另请注意,~["]*
也符合换行符。如果您不想这样做,请执行以下操作:~["\r\n]*