gpt4 book ai didi

java - 正则表达式匹配最短匹配而不是最长匹配

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:15 29 4
gpt4 key购买 nike

我正在尝试编写正则表达式,但在某些情况下无法使其工作。这是正则表达式

(\/[ABCGIKLNPRSUV])?(\/RC-[A-Z0-9]{2,6})?

匹配可能是以下之一

  • /R/RC-ABC123
  • /R
  • /RC-ABC123

上述正则表达式适用于/R 和/R/RC-ABC123,但不适用于/RC-ABC123。对于/RC-ABC123,它会继续匹配第一组而不是第二组,并且只将/R作为匹配组件。

我怎样才能让它适用于所有情况。此外,上述表达式只是完整表达式的一部分,即 RC-ABC123 之后可能还有另一个(第三个)组。但首先要让它适用于这两个组。

更新这 ??似乎在 regex101 中工作,但在 java 中不起作用。我使用以下代码得到 2 个组,但/R/RC-ABC123 的值为空

Pattern pattern = Pattern.compile("(/[A-Z])??(/RC-[A-Z0-9]{2,6})?");
Matcher matcher = pattern.matcher("/R/RC-ABC12345");
if(matcher.find()) {
for(int i=1; i<= matcher.groupCount(); i++) {
System.out.println("Group("+i+") = " + matcher.group(i));
}
}else {
System.out.println("Pattern does not match");
}

最佳答案

使用??使第一个可选组变得非贪婪,因此如果有选择的话它会更愿意匹配第二组。

(/[ABCGIKLNPRSUV])??(/RC-[A-Z0-9]{2,6})?

DEMO

关于java - 正则表达式匹配最短匹配而不是最长匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927647/

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