正则表达式匹配任何以两个修复字母开头的单词

时间:2013-04-09 13:57:35

标签: java regex

我需要正则表达式匹配任何以两个修复字母开头的单词,例如 CO CC EX FR < / strong>:

  1. COYEAR / NUMBER例如。 :CO2001 / 123
  2. CCYEAR / NUMBER例如。 :CC2001 / 123
  3. EXYEAR / NUMBER例如。 :EX2001 / 123
  4. FRYEAR / NUMBER例如。 :FR2001 / 123
  5. 我创建了一种格式:^[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 个答案:

答案 0 :(得分: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}$"

答案 1 :(得分:1)

str.matches("(CO|CC|EX|FR)\\d{4}/\\d{1,8}")

答案 2 :(得分:1)

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

不,它没有,它说字符串应该以{{1​​}},CEF开头,然后是,OCXR。即字符串,将匹配。

尝试

",,"

答案 3 :(得分:0)

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