作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下输入字符串:
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
吗?
最佳答案
你可以使用
".*\\.([^.]*)"
匹配
.*\.
- 任何 0+ 个字符,直到最后一个 .
字符 ([^.]*)
- 捕获第 1 组:除点以外的任何 0+ 个字符。参见 regex demo和正则图:
关于Java 正则表达式 : find the last occurrence of a string using Matcher. 匹配(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407958/
我是一名优秀的程序员,十分优秀!