正则表达式不起作用将拖尾报价

时间:2018-05-17 17:12:00

标签: java regex

我有正则表达式删除匹配可以开始并以引号结束的字符串。所以我创建了一个正则表达式。

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 :(得分:1)

您不需要上一个#TEST_ENV_(.*)=\"?(.*)\" ,因为它会停止(?<=\").*(?=\") 的贪婪并停在第一个{{1}}

{{1}}

<强> RollUp.js

否则,如果目标只是匹配引号之间的字符串,那么您可以简单地使用正向前瞻和后瞻

{{1}}

<强> Demo

答案 1 :(得分:0)

这个会正确匹配你的东西:

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

这抓住了:

  • 您的#TEST_ENV_字符串
  • 第一组
  • 中任何不等号的东西
  • 等号本身
  • 可选引用,如第2组
  • 报价的内容,定义为“任何不是报价”
  • 对第2组的反向引用,意味着如果正面有一个支架,则需要一个支架。

当然,数据将在第1组和第3组中,因为#2用于括号。

Test it yourself