如何为该文本创建正则表达式?

BMW*_*BMW 2 java regex

我需要创建一个正则表达式来检查文本是否遵循以下格式:

前两个字母将始终是“AB”,而不是 1-9 之间的数字,而不是 A 或 B,而不是破折号(“-”),而不是一堆随机文本后跟冒号(“:”),然后索引位置是一个字母和 2 位数字。

所以像这样:

AB8B-ANYLETTERS:H12
Run Code Online (Sandbox Code Playgroud)

或者

AB3B-ANYTHINGCANGOHERE:A77
Run Code Online (Sandbox Code Playgroud)

我这样做是为了检查索引位置,但无法找出冒号前的文本。

"^.*:[A-H]\\d\\d"
Run Code Online (Sandbox Code Playgroud)

所以一般格式是:

AB[1-9][A or B]-[ANYCHARACTERS]:[A-Z][01-99]
Run Code Online (Sandbox Code Playgroud)

我正在使用 Java。

Emm*_*mma 5

我猜这个表达式可能会验证:

^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$
Run Code Online (Sandbox Code Playgroud)

该表达式在regex101.com 的右上角面板中进行了解释,如果您希望探索/简化/修改它,并且在此链接中,您可以观看它如何与某些示例输入匹配,如果您愿意的话。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$";
final String string = "AB8B-ANYLETTERS:H12\n"
     + "AB3B-ANYTHINGCANGOHERE:A77";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

正则表达式电路

jex.im可视化正则表达式:

在此处输入图片说明


编辑

对于AC案例,我们会尝试:

^AB[1-9][AC]-[^:]+:[A-Z][0-9]{2}$
Run Code Online (Sandbox Code Playgroud)

演示 2