我希望能够解析“ 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)
也就是说,自动搜索与开始标签相同类型的结束标签
答案 0 :(得分:1)
否,("|').*?(\1)
是不可能的。我也不会这么做,.*?
就是这样:
STRING
: '"' ~["]* '"'
| '\'' ~[']* '\''
;
或者,如果您允许转义字符:
STRING
: '"' ( ~["]* | '\\' . )* '"'
| '\'' ( ~[']* | '\\' . ) '\''
;
还要注意,~["]*
也与换行符匹配。如果您不希望这样做,请执行以下操作:~["\r\n]*