2010-03-23 260 views
7

我知道已經有很多像我這樣的問題,但是我沒有找到可以在Java中使用的答案。所以我寫了一個新問題。Java正則表達式匹配帶引號的字符串與轉義引號

我的文本文件,像這樣的內容:

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

我需要這在雙引號(或單引號)相匹配的值的正則表達式。這個正則表達式必須支持轉義引號和轉義反斜線。 正則表達式必須與Java標準模式/匹配器類一起使用。

+0

密切相關,可能是有用的:http://stackoverflow.com/questions/263985/regex-question -one-or-more-spaces-outside-of-a-quote-enclosed-block-of-text – 2010-03-23 09:20:01

回答

8

試試這個正則表達式:

'([^\\']+|\\([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}))*" 

而作爲一個字符串字面量:

"'([^\\\\']+|\\\\([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

似乎迄今爲止工作,謝謝。 – kayahr 2010-03-23 09:35:41

+0

Crikey,這是一個正則表達式和一半。你剛剛提出這個問題,還是你用了一段時間? (例如,你會說這是多麼好的測試?) – 2010-03-23 10:25:22

+0

@OP:這看起來像它是專爲處理Java字符串和類似的(它處理Unicode轉義像'\ u1234',例如,和通常的Java'\ f' ,'\ t'等)。只要提及它,以防你的源數據與此稍有不同,因爲你實際上沒有說這些字符串是Java風格的,只是說它們可能有反斜槓引號和反斜線。實際上,我覺得你的字符串是JavaScript(它與Java字符串的語法幾乎相同,所以你可能沒問題)。 – 2010-03-23 10:26:52

相關問題