Регулярное выражение не работает - PullRequest
0 голосов
/ 17 мая 2018

У меня есть регулярное выражение для удаления совпадения со строкой, которая МОЖЕТ начинаться и заканчиваться кавычками.Поэтому я создал регулярное выражение для этого.

String str = "#TEST_ENV_TEST_VAR=\"value\"";
Pattern p = Pattern.compile("#TEST_ENV_(.*)=\"?(.*)\"?");
Matcher matcher = p.matcher(str);
matcher.find()
String key = matcher.group(2);

Но когда я проверяю key и строка value".Это должно быть value правильно, потому что мы добавили ? в конце.

Я пытаюсь использовать []? регулярное выражение, а также пытаюсь с *, но ни один не работает.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Это будет соответствовать вашим вещам правильно:

#TEST_ENV_([^=]*)=(\"?)([^\"]*)\2

Это захватывает:

  • ваша #TEST_ENV_ строка
  • ничего не знак равенства, в первой группе
  • сам знак равенства
  • необязательная цитата, как группа № 2
  • содержание цитаты, определяемой как "что-нибудь, а не цитата"
  • Обратная ссылка на группу 2, означающая, что требуется скобка, если она есть на передней панели.

Конечно, данные будут в группе № 1 и группе № 3, так как № 2 используется для скобок.

Проверьте сами .

0 голосов
/ 17 мая 2018

Вам не нужно последнее ?, потому что оно останавливает жадность (.*) и останавливается на первом "

#TEST_ENV_(.*)=\"?(.*)\"

Демо


В противном случае, если цель состоит только в том, чтобы сопоставить строку между кавычками, вы можете просто использовать положительный прогноз и lookbehinds

(?<=\").*(?=\")

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...