我正在尝试构造一个正则表达式来检查一个字母是否出现在一个字符串中,它应该在之前只有其他两个字符中的一个。我可以为一组字符执行此操作,但如何在字符串中为多个集合执行此操作?
例如:C只能在A或B之前,即如果找到C,则下一个字符只能是A或B.F只能在D或E之前(F不能在A或B之前)
A或B,然后可以发生C. D或E,然后F可以出现
我该怎么做?
以下给我一个错误:
String pattern = "([F][D|E])|([A][B|C])";
String test = "FEAC";
System.out.println(test.matches(pattern));
答案 0 :(得分:2)
假设只有允许的字母是A到F,你可以使用它:
^(?:C[AB]|F[DE]|[ABDEG-Z])+$
查看the demo
中的匹配项<强>解释强>
matches
方法不再需要锚点,但为原始版本解释它们:^
锚点断言我们位于字符串的开头$
锚点断言我们位于字符串的末尾C[AB]
C,然后匹配A或B,或|
F[DE]
一个F然后一个D或E,或|
[ABDEG-Z]
其中一封信件+
一次或多次选项:在字符串末尾允许使用C和F
如果您想在字符串末尾允许使用C或F,请添加:|[CF]$
(其中一种方法之一)
正则表达式成为:
^(?:C[AB]|F[DE]|[ABDEG-Z]|[CF]$)+$
在Java中:
if (subjectString.matches("(?:C[AB]|F[DE]|[ABDEG-Z])+")) {
// It matched!
}
else { // nah, it didn't match...
}