正则表达式的多个字符串用“或”运算符
问题描述:
我需要建立一个Java正则表达式,将认识到以下3种情况:正则表达式的多个字符串用“或”运算符
- 下列字符的任意组合/金额:“ACTGactg:”
或
- 任何单个问号“?”
或
- 任何字符串 “NTC”
请问正则表达式可能作为接受“NTC”字符串的通配符?
是或运算符“|”适合在这里?
使用这些或操作符时是否需要使用括号?
我会列出我迄今为止尝试和错误已出现。
public static final VALID_STRING = "[ACTGactg:]*";
// Matches the first case but not the second or third
// as expected.
public static final VALID_STRING = "\\?|[ACTGactg:]*";
// Matches all 3 conditions when my understanding leads me to
// believe that it should not except the third case of "NTC"
public static final VALID_STRING = "?|[ACTGactg:]*";
// Yields PatternSyntaxException dangling metacharacter ?
什么我希望是准确的是:
public static final VALID_STRING = "NTC|\\?|[ACTGacgt:]*";
但我要确保,如果我带走了“NTC”,任何“NTC”字符串将显示为无效。
这里是我用来测试这些正则表达式的方法。
private static boolean isValid(String thisString){
boolean valid = false;
Pattern checkRegex = Pattern.compile(VALID_STRING);
Matcher matchRegex = checkRegex.matcher(thisString);
while (matchRegex.find()){
if (matchRegex.group().length != 0){
valid = true;
}
}
return valid;
}
因此,这里有我的收盘问题: “\\?”
下面是一些例子传入字符串:
- A:C
- T:G^
- AA:CC
- T:C:甲:ģ
- NTC
- ?
谢谢
开始=>
答
是所提供的正则表达式将是确定的:从正则表达式的字符串NTC变为无效
public static final VALID_STRING = "NTC|\\?|[ACTGacgt:]+";
...
boolean valid = str.matches(VALID_STRING);
如果您删除NTC|
。
您可以测试它并试验自己here。
答
由于您使用的是Matcher.find()
方法,因此您正在字符串中的任意位置查找模式。
这意味着字符串A:C
,T:G
,AA:CC
等等完全匹配。但如何NTC
?
它匹配是因为find()
在任何地方寻找匹配。它的TC
部分匹配,因此你得到true
。
如果您只想匹配整个字符串,请使用match()
方法,或使用^
和$
。
请注意,如果将模式更改为[ACTGactg:]+
而不是[ACTGactg:]*
,则不必检查匹配是否大于0。
+0
谢谢你的深入解释这肯定是有道理的。 – Malonge 2015-02-11 22:53:15
既然你有一个建议的解决方案,为什么不测试它,看看它是否工作,并试着用括号和不用括号? – DNA 2015-02-11 22:25:00
您使用哪种对象/方法来测试字符串? – RealSkeptic 2015-02-11 22:25:51
@DNA伟大的一点。我尝试了许多不同的组合,并失去了所有单项结果的踪迹。我想我在问什么是规则/惯例。 – Malonge 2015-02-11 22:27:15