【发布时间】:2019-08-19 20:03:14
【问题描述】:
我有以下输入字符串:
abc.def.ghi.jkl.mno
输入中的点字符数可能会有所不同。我想提取最后一个. 之后的单词(即上面示例中的mno)。我正在使用以下regex,它的工作非常好:
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group(1));
}
但是,我正在使用第三方库来进行这种匹配(准确地说是Kafka Connect),我可以为其提供正则表达式模式。问题是,这个库(我无法更改其代码)使用matches() 而不是find() 进行匹配,当我使用matches() 执行相同的代码时,它不起作用例如:
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
上面的代码不打印任何东西。根据javadoc,matches() 尝试匹配整个字符串。有什么方法可以使用matches() 应用类似的逻辑从我的输入字符串中提取mno?
【问题讨论】:
-
使用
.*\.(.+)并获取第 1 组值。 -
听起来你在描述两个不同的问题。你是提取还是匹配?或两者?因为
matches()单独不会提取任何东西。 -
你想要mno吗? :-)
-
".*\\.([^.]*)"应该这样做 -
@WiktorStribiżew 效果很好。您可以将此添加为答案吗?然后我会接受。
标签: java regex regex-greedy