2017-07-26 70 views
1

有在SQL兩條逃生類型:?\」和‘’ 一個輸入可能會喜歡:如何解析SQL字符串包含ESCAPE在ANTLR4

SELECT '\'', ''''; 

我分析字符串與此語法:

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

但ANTLR解析輸入錯誤,樹是這樣的: error parsed tree

我也嘗試過其他類型的STRING_LITERAL語法的貪婪: 「?」:

STRING_LITERAL 
: '\'' ('\\\'' | '\'\'' | ~'\'')*? '\'' 
; 

,但它也給我一個錯誤解析resule這樣的: error parsed tree in another grammar 的「」「」應該解析爲一個字符串包含但不是兩個空字符串。

我該如何修改語法來解決問題?

回答

0

您並未排除(...)*中的\。試試這個:

STRING_LITERAL 
: '\'' ('\\\'' | '\'\'' | ~['\\])* '\'' 
; 

其中~['\\]除了'\任何字符相匹配。您可能需要在其中包含換行符字符:~[\r\n'\\]