我有以下输入字符串:
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));
}
上面的代码不打印任何内容。根据{{3}},matches()
尝试匹配整个字符串。我有什么方法可以使用matches()
来从输入字符串中提取mno
来应用类似的逻辑?
答案 0 :(得分:2)
答案 1 :(得分:1)
要根据您的指令提取最后一个.
之后的单词,您可以在没有Pattern和Matcher的情况下执行以下操作:
String input = "abc.def.ghi.jkl.mno";
String getMe = input.substring(input.lastIndexOf(".")+1, input.length());
System.out.println(getMe);
答案 2 :(得分:0)
这将起作用。在开头使用.*
使其与整个输入匹配。
public static void main(String[] argv) {
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile(".*([^.]{3})$");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
}
}
abc.def.ghi.jkl.mno
mno
如果圆点确实在任何地方,这是一个更好的模式:".*\\.([^.]+)$"