gpt4 book ai didi

Java 正则表达式识别对 Github 中错误的引用

转载 作者:行者123 更新时间:2023-11-30 06:50:27 25 4
gpt4 key购买 nike

我需要捕获从 Github 中的提交消息中引用的所有错误编号。

错误号是一个整数,引用以fix/fixes/fixed/fixing/开头关闭/关闭/关闭/关闭/解决/解决/resolved/resolving 后跟 #XYZ 其中 XYZ 是错误编号。

这是一个例子和我尝试过的:

String commitMessage = "This fixes #23 fixed#24 fix #25, #26 resolves #27 #28#29 resolved#30 #31 ,  #32. Also see #33";
String regex = "clos(e|es|ed|ing) ?#[0-9]+"
+ "|fix(es|ed|ing)? ?#[0-9]+"
+ "|resolv(e|es|ed|ing) ?#[0-9]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(commitMessage);
while (m.find()){
System.out.println(m.group(0));
}

输出是:

fixes #23
fixed #24
fix #25
resolves #27
resolves#30

但我需要它是:

fixes #23
fixed #24
fix #25, #26
resolves #27 #28#29
resolved#30 #31 , #32

请注意,引用可能是针对单个错误(例如,#23)或同时针对多个错误(例如,#25、#26)。

另请注意,当引用多个错误时,不同错误编号之间可能有一个或多个空格和/或逗号。

最佳答案

您可以将 [\s\p{P}]* 添加到 # 之前的正则表达式以匹配空格或标点符号,0 次或多次出现,以及你可以稍微收缩一下模式:

String regex = "(?:(?:clos|resolv)(?:e|es|ed|ing)|fix(?:es|ed|ing)?)(?:[\\s\\p{P}]*#[0-9]+)+";

主要区别在于 (?:[\\s\\p{P}]*#[0-9]+)+ 匹配 1 次或多次出现:

  • [\\s\\p{P}]* - 0+ 个空格或标点符号
  • # - 哈希符号
  • [0-9]+ - 1 个或多个数字。

参见 Java demo :

String commitMessage = "This fixes #23 fixed#24 fix #25, #26 resolves #27 #28#29 resolved#30 #31 ,  #32. Also see #33";
String regex = "(?:(?:clos|resolv)(?:e|es|ed|ing)|fix(?:es|ed|ing)?)(?:[\\s\\p{P}]*#[0-9]+)+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(commitMessage);
while (m.find()){
System.out.println(m.group(0));
}

输出:

fixes #23
fixed#24
fix #25, #26
resolves #27 #28#29
resolved#30 #31 , #32

关于Java 正则表达式识别对 Github 中错误的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41371238/

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