2013-07-27 4 views
5

В ANTLR v4, как мы анализируем этот тип строки с двойными кавычками, сбрасываемыми двойными кавычками, например, в VBA?ANTLRv4: Как читать двойные кавычки с двойными кавычками в строке?

для текста:

"some string with ""john doe"" in it" 

цель будет идентифицировать строку: some string with "john doe" in it

А можно переписать его, чтобы включить двойные двойные кавычки в одинарные двойные кавычки? "" -> "?

ответ

9

Как это:

STRING 
: '"' (~[\r\n"] | '""')* '"' 
; 

где ~[\r\n"] | '""' означает:

~[\r\n"] # any char other than '\r', '\n' and double quotes 
|   # OR 
'""'  # two successive double quotes 

А можно переписать его, чтобы включить двойные двойные кавычки в одинарные двойные кавычки?

Не без внедрения пользовательского кода. Java может выглядеть так:

STRING 
: '"' (~[\r\n"] | '""')* '"' 
    { 
    String s = getText(); 
    s = s.substring(1, s.length() - 1); // strip the leading and trailing quotes 
    s = s.replace("\"\"", "\""); // replace all double quotes with single quotes 
    setText(s); 
    } 
; 
+0

работает как очарование. вопрос, можно ли переписать его, чтобы превратить двойные двойные кавычки в одиночные двойные кавычки? «» -> «Спасибо! – JayDee

+0

@JayDee см. мой пересмотренный ответ –

+1

Для использования ANTLR 4 следующее правило работает как с двойными кавычками, так и с одинарными кавычками: STRING: '"' (~ [\ r \ n "] | '""') * '' '| '\' '(~ [\ r \ n \'] | '\' \ '') * '\' '; –