2010-03-23 67 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

相关问题