2010-03-23 3 views
7

Я знаю, что есть уже много вопросов вроде моего, но я не нашел ответа, который работает на Java. Поэтому я пишу новый вопрос.Java Regex для сопоставления строки с кавычками с экранированными кавычками

У меня есть текстовые файлы с контентом, как это:

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

мне нужно регулярное выражение, которое соответствует значениям в двойных кавычках (или одиночных кавычках). Это регулярное выражение должно поддерживать скрытые кавычки и сбрасываемые обратные косые черты. Регулярное выражение должно работать со стандартными классами Java/Matcher.

+0

тесно связаны между собой, могут быть полезны: http://stackoverflow.com/questions/263985/regex-question -one-or-more-spaces-out-of-a-quote-enclosed-block-of-text –

ответ

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

+0

Крики, это регулярное выражение. Вы только что придумали это, или это то, что вы использовали в течение определенного периода времени? (Например, насколько хорошо вы сказали бы это?) –

+0

@OP: Это похоже на то, что он предназначен для обработки строк Java и тому подобного (он, например, обрабатывает escape-последовательности Unicode, такие как '\ u1234', и обычный Java' \ f' , '\ t' и т. д.). Просто упомяните об этом, если ваши исходные данные немного отличаются от этого, так как вы на самом деле не сказали, что строки были в стиле Java, просто они могут иметь обратные косые обратные косы и обратную косую черту. На самом деле мне кажется, что ваши строки - это JavaScript (которые имеют почти такой же синтаксис, как строки Java, поэтому вы, вероятно, хорошо). –