Java Regex для сопоставления строки в кавычках с экранированными кавычками

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

У меня есть текстовые файлы с таким содержимым:

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

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


person kayahr    schedule 23.03.2010    source источник
comment
Тесно связаны, могут быть полезны: text" title="регулярное выражение вопрос один или несколько пробелов за пределами блока текста, заключенного в кавычки"> stackoverflow.com/questions/263985/   -  person T.J. Crowder    schedule 23.03.2010


Ответы (1)


Попробуйте это регулярное выражение:

'([^\\']+|\\([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}))*\""
person Gumbo    schedule 23.03.2010
comment
Crikey, это регулярное выражение с половиной. Вы только что придумали это, или это то, что вы использовали в течение определенного периода времени? (Например, насколько хорошо, по вашему мнению, это проверено?) - person T.J. Crowder; 23.03.2010
comment
@OP: похоже, что он предназначен для обработки строк Java и тому подобного (например, он обрабатывает escape-последовательности Unicode, такие как \u1234, и обычные Java \f, \t и тому подобное). Просто упоминание об этом на случай, если ваши исходные данные немного отличаются от этих, поскольку вы на самом деле не сказали, что строки были в стиле Java, просто они могут иметь кавычки с обратной косой чертой и обратную косую черту. На самом деле, мне кажется, что ваши строки — это JavaScript (у которого почти такой же синтаксис, как у строк Java, так что вы, вероятно, в порядке). - person T.J. Crowder; 23.03.2010
comment
Да, строки — это JavaScript. Но я разбираю их с помощью Java. - person kayahr; 23.03.2010