2013-04-09 124 views
1

我需要相匹配,它有两个固定字母开头像COCCEXFR任何词,正则表达式:正则表达式匹配,它有两个固定字母开头的单词

  1. COYEAR/NUMBER例如。 :CO2001/123
  2. CCYEAR/NUMBER例如。 :CC2001/123
  3. EXYEAR/NUMBER eg。 :EX2001/123
  4. FRYEAR/NUMBER eg。 :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); 
    } 

} 

回答

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]
  • 必须有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}$" 
+0

谢谢,我测试过,但最后一个'VR'不工作。 – iMBMT 2013-04-09 14:14:31

+1

但是VR不应该按照你的规则工作。你的图案覆盖'FR'而不是'VR' – 2013-04-09 14:15:17

+0

是的,这是我的错误。 – iMBMT 2013-04-09 14:18:08

0

您没有使用,你可以使用String.startsWith()正则表达式。在这种情况下,你会检查你的字符串对所有有效的起始字符。

+0

谢谢,但我只想要正则表达式。我只为测试Regex创建了测试示例。 – iMBMT 2013-04-09 14:03:49

1

尝试

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

这种格式^[C,E,F][O,C,X,R]说输入的值应与C,E或F,并在此之后的任何单词从O,C启动, X和R是允许的。

不,它不需要,它说该字符串应该CEF,或,,并且后面OCXR,启动。即字符串",,"将匹配。

尝试

"^(CO|CC|EX|FR)" 
相关问题