2010-03-23 37 views
7

Tôi biết đã có nhiều câu hỏi như tôi nhưng tôi không tìm thấy câu trả lời nào hoạt động trong Java. Vì vậy, tôi viết một câu hỏi mới.Java Regex cho phù hợp với chuỗi trích dẫn với dấu ngoặc kép thoát

Tôi có tập tin văn bản với nội dung như thế này:

 
key1 = "This is a \"test\" text with escapes using '\\' characters"; 
key2 = 'It must work with \'single\' quotes and "double" quotes'; 

Tôi cần một biểu thức chính quy mà phù hợp với các giá trị trong hai dấu ngoặc kép (hoặc đơn dấu ngoặc kép). Cụm từ thông dụng này phải hỗ trợ dấu ngoặc kép thoát và thoát dấu gạch chéo ngược. Cụm từ thông dụng phải hoạt động với các lớp Pattern/Matcher tiêu chuẩn Java.

+0

Liên quan chặt chẽ, có thể hữu ích: http://stackoverflow.com/questions/263985/regex-question -không-hoặc-nhiều-không gian-bên ngoài-of-a-quote-kèm theo-block-of-văn bản –

Trả lời

8

Hãy thử biểu thức chính quy này:

'([^\\']+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|"([^\\"]+|\\([btnfr"'\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*" 

Và như một chuỗi chữ:

"'([^\\\\']+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*'|\"([^\\\\\"]+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]{1,2}|u[0-9a-fA-F]{4}))*\"" 
+1

Dường như làm việc cho đến nay, cảm ơn. – kayahr

+0

Crikey, đó là một regex và một nửa. Bạn vừa mới nghĩ ra điều này, hay đó là điều bạn đã sử dụng trong một khoảng thời gian? (Ví dụ, bạn thử nghiệm như thế nào?) –

+0

@OP: Có vẻ như nó được điều chỉnh để xử lý các chuỗi Java và tương tự (nó xử lý Unicode thoát như '\ u1234', ví dụ, và Java thông thường' \ f' , '\ t' và như vậy). Chỉ cần đề cập đến nó trong trường hợp dữ liệu nguồn của bạn hơi khác với dữ liệu đó, vì bạn không thực sự nói rằng các chuỗi nằm trong kiểu Java, chỉ cần chúng có dấu ngoặc kép và dấu gạch chéo ngược. Trong thực tế, nó âm thanh với tôi như dây của bạn là JavaScript (trong đó có cú pháp rất gần giống như Java, vì vậy bạn có thể tốt). –

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