我需要创建一个正则表达式来检查文本是否遵循以下格式:
前两个字母将始终是“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。
我猜这个表达式可能会验证:
^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)