2013-07-27 13 views
5

W ANTLR v4, w jaki sposób analizować ten ciąg znaków za pomocą podwójnych cudzysłowów z podwójnym cudzysłowem, podobnie jak w VBA?ANTLRv4: Jak odczytać podwójny cudzysłów w cudzysłowach?

tekstu:

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

celem byłoby określenie ciągu: some string with "john doe" in it

I czy to możliwe, aby przerobić go włączyć podwójnych cudzysłowów w pojedynczych cudzysłowach? "" -> "?

Odpowiedz

9

Jak to:

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

gdzie ~[\r\n"] | '""' oznacza:

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

I czy to możliwe, aby przerobić go włączyć podwójnych cudzysłowów w pojedynczych cudzysłowach?

Nie bez umieszczania niestandardowego kodu. W języku Java może wyglądać następująco:

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

działa jak urok. pytanie boczne, czy można przepisać je, aby zamienić podwójne podwójne cudzysłowy w pojedyncze podwójne cudzysłowy? "" -> "? thanks! – JayDee

+0

@JayDee zobacz moją poprawioną odpowiedź –

+1

Dla mnie przy użyciu ANTLR 4 następująca reguła działała zarówno z ciągami cudzysłowów jak i cudzysłowami: STRING: '"' (~ [\ r \ n "] | '""') * '"' | '\' '(~ [\ n \ n \'] | '\' \ '') * '\' '; –

Powiązane problemy