如果要匹配不同的情况,如何使用str.matches()?

时间:2019-04-13 09:52:49

标签: java

我有以下字符串B113AAASV54DDD。我想测试基于此格式[LETTER{LETTER}][NUMBERNUMBER{NUMBER}][LETTERLETTERLETTER]的任何String。

我放置了第二个{letter}和第三个{number},因为它是可选的。我想知道我是否可以使用正则表达式来执行此操作,而无需任何其他条件语句(if)。例如,如果首字母为B,则不需要{}中的第二个字母,如果为B,则中间可以有3个数字。但是,如果不是B,则必须包含2个字母和2个数字(LETTERLETTER NUMBERNUMBER LETTER LETTER LETTER)。 谢谢!

这仅适用于BB1N,不适用于B1N

String x ="B1N";
if(x.matches("[A-Z]{2}[0-9][A-Z]"))

2 个答案:

答案 0 :(得分:1)

您可以根据需要使用轮换

  

((一个字母和三个数字)或((两个字母和两个数字))和树字母

所以你可以这样写:

String regex = "([A-Z][0-9]{3}|[A-Z]{2}[0-9]{2})[A-Z]{3}";
List<String> list = Arrays.asList("B123XXX", "BB123XXX","B12XXX", "BB12XXX","BB12XXXX");
for (String string : list) {
    System.out.println(string + " : " + string.matches(regex));
}

答案 1 :(得分:1)

是的,有可能。您可以将其设置为:

String regex = "^((?:B\d{3})|(?:[AC-Z][A-Z]\d{2}))[A-Z]{3}$"

然后按照以下方式进行比赛:

String x = ... ; // Represents your string to be compared.
if(x.matches(regex))