antlr4 - 用ANTLR分析包含单引号的引号之间的字符串
问题描述
我希望能够用 ANTLR4 解析像“test'test”这样的字符串
我的语法:
QUOTE: ('\''|'"');
STRING: QUOTE .*? QUOTE;
我的解析器:
matcher: STRING;
在另一篇文章中,提出了以下可能性: 在 ANTLR4 中处理单引号和双引号字符串的范围
语法 :
SQUOTE: '\'';
DQUOTE: '"';
STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE );
但是,这种可能性会在维护期间产生冗余并因此产生风险
这就是为什么我想知道是否有可能找到等效的正则表达式:
("|').*?(\1)
也就是说,自动搜索与开始标签相同类型的结束标签
解决方案
不,("|').*?(\1)
不可能。我也不会这样做.*?
,但像这样:
STRING
: '"' ~["]* '"'
| '\'' ~[']* '\''
;
或者,如果您允许转义字符:
STRING
: '"' ( ~["]* | '\\' . )* '"'
| '\'' ( ~[']* | '\\' . ) '\''
;
另请注意,它~["]*
也匹配换行符。如果您不希望这样做,请执行以下操作:~["\r\n]*
推荐阅读
- java - 将xml转换为java对象时获取null
- azure - 是否可以在不使用实际事件中心的情况下在本地执行事件中心触发的 Azure 函数?
- c# - Razor Page C# ASP.NET Core get Windows Username (Windows Auth)
- mysql - How to make login limit in NodeJS?
- javascript - pre-parsing and execution context
- swift - How to get bounce animation in SwiftUI?
- selenium - Failed to open connection to "session" message bus: /usr/bin/dbus-launch terminated abnormally without any error message
- firebase - 使用 firebase 时 Google appscript 中的服务器错误
- linq - LINQ DistinctBy 选择要保留的对象
- angular - 无法在环境上下文中声明访问器:ngx-barcode 扫描仪