Java 匹配一年中的最后一次事件

Java 匹配一年中的最后一次事件,java,regex,Java,Regex,我正在尝试匹配去年在爪哇发生的最后一次人员工作 1995年6月至2003年6月(8年1个月)将返回2003年 1989年至1995年6月(6年)将返回1995年 信息总是采用这种格式,所以我想如果我从字符串的末尾开始查找前4位数字,但我不确定如何执行此操作 我知道\b\d{4}\b匹配前4位数字,但我需要最后出现的4位数字。您可以使用此负前瞻正则表达式: \bd{4}\b(?!.*\b\d{4}\b) 这将匹配一行中的4位数字,但后面没有被单词边界包围的另外4位数字 (?!.\b\d{4}\

我正在尝试匹配去年在爪哇发生的最后一次人员工作

1995年6月至2003年6月(8年1个月)将返回2003年

1989年至1995年6月(6年)将返回1995年

信息总是采用这种格式,所以我想如果我从字符串的末尾开始查找前4位数字,但我不确定如何执行此操作
我知道\b\d{4}\b匹配前4位数字,但我需要最后出现的4位数字。

您可以使用此负前瞻正则表达式:

\bd{4}\b(?!.*\b\d{4}\b)

这将匹配一行中的4位数字,但后面没有被单词边界包围的另外4位数字

(?!.\b\d{4}\b)
是负向前看,用于断言行中当前位置前面没有4位数字

在Java中,您可以使用:

String re = "\\bd{4}\\b(?!.*\\b\\d{4}\\b)";

匹配地段,然后抓取第二年:

[A-Za-z]+\\s\\d{4}\\s–\\s[A-Za-z]+\\s(?<year>\\d{4}).*
[A-Za-z]+\\s\\d{4}\\s–\\s[A-Za-z]+\\s(?\\d{4})*
然后只需使用
matcher.group(“year”)
获取值,为了获取模式的最后一次出现,只需在其前面加上贪婪的
*
。然后使用
\K
提取所需图案:

(很遗憾,Java不支持),或者将您的模式包装到捕获组中:

并访问代码中的组:

String input = "June 1995 – June 2003 (8 years 1 month)";
Pattern pattern = Pattern.compile(".*(\\b\\d{4}\\b)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
    System.out.print(matcher.group(1));
}

演示:

Define不太管用。。您遇到的问题是什么?您可以将所有4位数字值与
\b\d{4}\b
匹配,然后获取最后一位。只需继续将找到的值分配给字符串变量。我刚刚运行了这个,但它与我的字符串不匹配。您是否使用了Pattern and Matcher类?是的,您将需要使用
Pattern
Matcher
API。您还需要使用
matcher.find()
来获得匹配。你能在问题中显示你的代码吗?没关系,我修好了,我漏掉了一些东西!很高兴知道它成功了,