无法对以final Map<String, AtomicLong> gauges = new ConcurrentHashMap<>();
protected void submitMetric(String metricName, long value) {
// If the gauge does not exist, create and register it
gauges.computeIfAbsent(metricName, k -> {
AtomicLong g = new AtomicLong();
mr.register(k, new Gauge<Long>() {
@Override
public Long getValue() {
return g.get();
}
});
return g;
}).set(value); // Then set the value
// Counters can be retrieved by name
mr.counter(metricName + "Counter").inc(value);
// Meters can be retrieved by name
mr.meter(metricName + "Meter").mark(value);
}
开始并以?
结尾的字符串实现正则表达式
附加单引号或双引号。
例如:
;
我做了很多尝试,例如?abcdef;
'?abcdef;'
"?abcdef;"
,但没有成功。
测试代码段:
"^\\?([^;]+)\\;$"
答案 0 :(得分:5)
您可以使用此正则表达式:
(["']?)\?.*;\1
用于Java:
final String pattern = "(['\"]?)\\?.*;\\1";
(["']?)
与可选 '
或"
匹配并捕获到#1组\1
向后引用与#1组中相同的值答案 1 :(得分:1)
您可以使用
final String text = "This is param-start ?abcdef; param-end";
final String patternString = "(['\"]?)\\?.*?;\\1";
final Pattern pattern = Pattern.compile(patternString, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Match found: " + matcher.group());
}
// => Match found: = ?abcdef;
请参见Java demo和regex demo。 Regulex图:
注释:
while (matcher.find())
-遍历字符串中所有可能的匹配项matcher.group()
-访问匹配值。正则表达式
(['"]?)
-捕获组1:'
或"
\?
-一个?
字符.*?
-任意0个以上的字符,并尽可能少(该模式使用Pattern.DOTALL
进行编译,因此它也可以跨换行符匹配);
-分号\1
-与第1组中捕获的值相同。答案 2 :(得分:0)
您的描述中指出“以?开头;以;结束”,但是您的示例字符串不以分号结尾-以双引号结尾。
如果要允许字符串以单引号或双引号开头或结尾,则匹配项应为:
^['"]?\?[^;]+;\['"]?$