我有以下的输入字符串:
abc.def.ghi.jkl.mno
输入中的点字符数可能会有所变化。 我想提取最后一个 .
后面的单词(即上面示例中的 mno
)。 我正在使用以下 正则表达式
,它完全正常运行:
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
?
.*\.(.+)
并获取第一组的值。 - Wiktor Stribiżewmatches()
无法提取任何内容。 - shmosel