我正在将ANTLR与Presto语法一起使用,以解析SQL查询。这是我正在使用的字符串的定义:
STRING
: '\'' ( ('\\' '\'') | ~'\'' | '\'\'' )* '\''
;
但是,当我有这样的查询时:
select replace(name,'\'','')
FROM table1;
它解析时把事情弄乱了:'\','作为一个字符串。
当我改用以下规则时:
STRING
: '\'' ( ('\\' '\'') | ~'\'')* '\''
;
我没有正确解析以下查询:
SELECT * FROM table1 where col1 = 'nir''s'
当然是合法查询。
任何想法我都可以抓住两者吗?
谢谢,尼尔
如果要支持\'
,则不仅应否定单引号,还应否定反斜杠。
类似这样的东西:
STRING
: '\'' ( '\\' '\'' // match \'
| ~[\\'] // match anything other than \ and '
| '\'\'' // match ''
)*
'\''
;