我有正则表达式删除匹配可以开始并以引号结束的字符串。所以我创建了一个正则表达式。
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
,因为我们最后添加了?
。
我尝试使用[]?
正则表达式,并尝试使用*
但没有效果。
答案 0 :(得分:1)
您不需要上一个#TEST_ENV_(.*)=\"?(.*)\"
,因为它会停止(?<=\").*(?=\")
的贪婪并停在第一个{{1}}
{{1}}
<强> RollUp.js 强>
否则,如果目标只是匹配引号之间的字符串,那么您可以简单地使用正向前瞻和后瞻
{{1}}
<强> Demo 强>
答案 1 :(得分:0)
这个会正确匹配你的东西:
#TEST_ENV_([^=]*)=(\"?)([^\"]*)\2
这抓住了:
#TEST_ENV_
字符串当然,数据将在第1组和第3组中,因为#2用于括号。