2013-07-27 24 views
5

Trong ANTLR v4, làm thế nào để chúng tôi phân tích cú pháp loại chuỗi này với dấu ngoặc kép kép thoát kép như trong VBA?ANTLRv4: Làm thế nào để đọc báo giá gấp đôi thoát kép trong chuỗi?

cho văn bản:

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

mục tiêu sẽ là để xác định các chuỗi: some string with "john doe" in it

Và là nó có thể viết lại nó để biến đôi dấu ngoặc kép trong dấu ngoặc kép duy nhất? "" -> "?

Trả lời

9

Như thế này:

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

nơi ~[\r\n"] | '""' có nghĩa là:

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

Và là nó có thể viết lại nó để biến đôi dấu ngoặc kép trong dấu ngoặc kép duy nhất?

Không cần nhúng mã tùy chỉnh. Trong Java có thể trông giống như:

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

hoạt động như một sự quyến rũ. câu hỏi phụ, là nó có thể viết lại nó để biến gấp đôi dấu ngoặc kép trong dấu ngoặc kép duy nhất? "" -> "? Cảm ơn! – JayDee

+0

@JayDee xem câu trả lời đã sửa đổi của tôi –

+1

Đối với tôi, hãy sử dụng ANTLR 4 quy tắc sau đây đã làm việc với cả hai chuỗi được trích dẫn và được trích dẫn một lần: STRING: '"' (~ [\ r \ n "] | '""') * '"' | '\' '(~ [\ r \ n \'] | '\' \ '') * '\' '; –

Các vấn đề liên quan