我正在尝试构建一个正则表达式来检查某个字母是否出现在字符串中,它应该位于其他两个字符之一。我可以对一组字符执行此操作,但如何对字符串中的多个字符集执行此操作?
例如: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));
最佳答案
假设唯一允许的字母是 A 到 F,您可以使用:
^(?:C[AB]|F[DE]|[ABDEG-Z])+$
查看the demo中的比赛
说明
- 对于
matches
方法来说, anchor 不是必需的,但需要在原始版本中解释它们: ^
anchor 断言我们位于字符串的开头$
anchor 断言我们位于字符串的末尾- 匹配
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...
}
关于Java正则表达式前面的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24733633/