gpt4 book ai didi

Java 正则表达式 : find the last occurrence of a string using Matcher. 匹配()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:11 24 4
gpt4 key购买 nike

我有以下输入字符串:

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和正则图:

enter image description here

关于Java 正则表达式 : find the last occurrence of a string using Matcher. 匹配(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com