Java正则表达式的麻烦

Java正则表达式的麻烦,java,regex,string,Java,Regex,String,我有一个字符串需要使用正则表达式提取。最好只使用一个正则表达式。由于它与9个预先存在的正则表达式一起在循环中使用,所以我可以将它添加到可用正则表达式的ArrayList中 字符串的模式将始终是 在{4,8}A-Z0-9之间。然后是, [A-Z]{1}或[A-Z0-9]{2}或另一[A-Z0-9]{4,8} 例如: “A1B1C1 ABCD E FGHI JK X0Y0Z0” 我希望这能返回四场比赛 A1B1C1 & ABCD E & FGHI JK & X0Y0Z0

我有一个字符串需要使用正则表达式提取。最好只使用一个正则表达式。由于它与9个预先存在的正则表达式一起在循环中使用,所以我可以将它添加到可用正则表达式的ArrayList中

字符串的模式将始终是 在{4,8}A-Z0-9之间。然后是, [A-Z]{1}或[A-Z0-9]{2}或另一[A-Z0-9]{4,8}

例如:

“A1B1C1 ABCD E FGHI JK X0Y0Z0”
我希望这能返回四场比赛

A1B1C1 & ABCD E & FGHI JK & X0Y0Z0
我一直在尝试匹配{4,8}特征的第一部分,然后是{1,2}的非贪婪匹配。例如:

[A-Z0-9]{4,8}(\\s{1}[A-Z0-9]{1,2})*?   &&   [A-Z0-9]{4,8}(\\s{1}[A-Z]{1}|\\s{1}[A-Z0-9]{2})*?

但是,这永远不会返回超过第一个{4,8}字符

您可以使用带有单词边界的可选部分和替换项来匹配[a-Z0-9]{2}或[a-Z]

\词边界 [A-Z0-9]{4,8}匹配4-8次A-Z0-9 ?:非捕获组 \h+匹配1+水平空格字符 ?:[A-Z0-9]{2}|[A-Z]匹配2 x A-Z0-9或1 x A-Z ? 关闭非捕获组并将其设置为可选 \词边界 |

在爪哇

String regex = "\\b[A-Z0-9]{4,8}(?:\\h+(?:[A-Z0-9]{2}|[A-Z]))?\\b";

为什么这个问题被否决了?也许您应该包括您原来失败的正则表达式。@plalx该问题已用尝试过的模式更新。第四只鸟,这个答案是100%,我非常感激,我不知道有一个团体存在,你给了我下一件我应该了解的事情。非常感谢。@JamesHudson欢迎您。你能把你的首个正则表达式加到这个问题上吗?我把首个正则表达式加到这个问题上了。
String regex = "\\b[A-Z0-9]{4,8}(?:\\h+(?:[A-Z0-9]{2}|[A-Z]))?\\b";