Java 如何为此文本创建正则表达式?
我需要创建一个正则表达式来检查文本是否遵循以下格式: 前两个字母总是“AB”,而不是数字 1-9比A或B比一个破折号('-')比一束 随机文本后跟冒号(“:”),然后索引 一个字母和两位数 所以像这样:Java 如何为此文本创建正则表达式?,java,regex,Java,Regex,我需要创建一个正则表达式来检查文本是否遵循以下格式: 前两个字母总是“AB”,而不是数字 1-9比A或B比一个破折号('-')比一束 随机文本后跟冒号(“:”),然后索引 一个字母和两位数 所以像这样: AB8B-ANYLETTERS:H12 或 我这样做是为了检查索引位置,但无法找出冒号前的文本 "^.*:[A-H]\\d\\d" 因此,一般的格式是: AB[1-9][A or B]-[ANYCHARACTERS]:[A-Z][01-99] 我正在使用Java 我猜这个表达式可能会验证:
AB8B-ANYLETTERS:H12
或
我这样做是为了检查索引位置,但无法找出冒号前的文本
"^.*:[A-H]\\d\\d"
因此,一般的格式是:
AB[1-9][A or B]-[ANYCHARACTERS]:[A-Z][01-99]
我正在使用Java 我猜这个表达式可能会验证:
^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$
如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果您愿意,可以查看它与一些示例输入的匹配情况
试验
你可以用
\\d
替换[0-9]
,他们做的事情与第一个数字的[1-9]
和第二个数字的[01-99]
是一样的,我想这就是(0[1-9]|[1-9][0-9])
。顺便说一句,你的regex101
链接指向了一个不同的例子。基本上,它可以是结尾处的任何数字,所以我只是在做/d谢谢你的回答,还有一个问题,在regex中我该怎么做“或”?就像我们的第四个字符,你做了A-B,但是如果我想做A和C,我能做[A | C]吗?为什么你需要尾随项的索引位置?你到底想做什么?
^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$
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));
}
}
^AB[1-9][AC]-[^:]+:[A-Z][0-9]{2}$