如何正确解析引号?

问题描述 投票:1回答:1

我正在将ANTLR与Presto语法一起使用,以解析SQL查询。这是我正在使用的字符串的定义:

STRING
    : '\'' ( ('\\' '\'') | ~'\'' | '\'\'' )* '\''
    ;

但是,当我有这样的查询时:

select replace(name,'\'','')
FROM table1;        

它解析时把事情弄乱了:'\','作为一个字符串。

当我改用以下规则时:

STRING
    : '\'' ( ('\\' '\'') | ~'\'')* '\''
    ;

我没有正确解析以下查询:

SELECT * FROM table1 where col1 = 'nir''s'

当然是合法查询。

任何想法我都可以抓住两者吗?

谢谢,尼尔

python sql antlr
1个回答
0
投票

如果要支持\',则不仅应否定单引号,还应否定反斜杠。

类似这样的东西:

STRING
    : '\'' ( '\\' '\''   // match \'
           | ~[\\']      // match anything other than \ and '
           | '\'\''      // match ''
           )* 
      '\''
    ;
© www.soinside.com 2019 - 2024. All rights reserved.