SQL中有两种ESCAPE类型:\'AND'' 输入可能会像:
SELECT '\'', '''';
我用这个语法解析字符串:
STRING_LITERAL
: '\'' ( '\\\'' | '\'\'' | ~'\'' )* '\''
;
但ANTLR解析输入错误,树如下: error parsed tree
我还尝试了另一种带GREEDY的STRING_LITERAL语法:“?”:
STRING_LITERAL
: '\'' ( '\\\'' | '\'\'' | ~'\'' )*? '\''
;
但它也给我一个错误解析resule像这样: error parsed tree in another grammar ''''应解析为包含但不包含两个空字符串的字符串。
我应该如何修改语法来解决问题?
答案 0 :(得分:0)
您没有排除\
中的( ... )*
。试试这个:
STRING_LITERAL
: '\'' ( '\\\'' | '\'\'' | ~['\\] )* '\''
;
其中~['\\]
匹配除'
和\
之外的任何字符。您可能希望在其中包含换行符:~[\r\n'\\]
。