1

我需要匹配任何以两个固定字母开头的单词的正则表达式,例如COCCEXFR

  1. COYEAR/NUMBER 例如。: CO2001/123
  2. CCYEAR/NUMBER 例如。: CC2001/123
  3. EXYEAR/NUMBER 例如。: EX2001/123
  4. FRYEAR/NUMBER 例如。: FR2001/123

我创建了一种格式:^[C,E,F][O,C,X,R][0-9]{4}(/{1})[0-9]{1,8}

这种格式^[C,E,F][O,C,X,R]表示输入的值应以 C、E 或 F 开头,然后允许来自 O、C、X 和 R 的任何单词。

但我有一些规则,比如

1)There must be O or C after C
2)There must be X after E 
3)There must be R after F

其他组合不允许。

示例测试示例:

public class TestRegEx {

    public static void main(String[] args) {

        String value1="CC2007/67";

        String value2="CO2001/123";
        String value3="CC2001/123";
        String value4="EX2001/123";
        String value5="FR2001/123";

        boolean value1isVerify=value5.matches("^[C,E,F][O,C,X,R][0-9]{4}(/{1})[0-9]{1,8}");
        System.out.println("isVerify--->"+value1isVerify);
    }

}
4

4 回答 4

1

看看这是否适合你

public static void main(String[] args) {
    String str = "^(C[OC]|E[X]|F[R])[0-9]{4}(/{1})[0-9]{1,8}$";

    System.out.println("CC2007/67".matches(str));
    System.out.println("CO2001/123".matches(str));
    System.out.println("CC2001/123".matches(str));
    System.out.println("EX2001/123".matches(str));
    System.out.println("VR2001/123".matches(str));

}

我如何应用你的规则:

  • C后面必须有O或C -->^C[OC]
  • E 后面必须有 X -->^E[X]
  • F后面必须有R -->^F[R]

由于只有第一个具有多个后续字符选项,因此可以这样重写:"^(C[OC]|EX|FR)[0-9]{4}(/{1})[0-9]{1,8}$";

但我决定离开这个小组,以便在你想添加其他可能的组合时更容易。您可以使用任何您觉得更舒服的版本。

而且我没有触及你的模式的其余部分,因为我不知道你到底匹配的是什么。但我相信它可以像这样缩短:

"^(C[OC]|EX|FR)\\d{4}/\\d{1,8}$"
于 2013-04-09T14:08:55.830 回答
1

尝试

str.matches("(CO|CC|EX|FR)\\d{4}/\\d{1,8}")
于 2013-04-09T14:11:17.537 回答
1

这种格式^[C,E,F][O,C,X,R]表示输入的值应以 C、E 或 F 开头,然后允许来自 O、C、X 和 R 的任何单词。

不,它没有,它说字符串应该以C, E, F, or开头,,然后是O, C, X, Ror ,。即字符串",,"将匹配。

尝试

"^(CO|CC|EX|FR)"
于 2013-04-09T14:11:35.600 回答
0

您不必使用可以使用的正则表达式String.startsWith()。在这种情况下,您将根据所有有效的起始字符检查您的字符串。

于 2013-04-09T14:01:17.793 回答