Java 正则表达式在测试用例中工作,但在实际代码中不工作
我有以下表示扑克牌图案的表达式:Java 正则表达式在测试用例中工作,但在实际代码中不工作,java,regex,Java,Regex,我有以下表示扑克牌图案的表达式: String RCARD1 = "[CDHS]{1}\\:\\d{1,2}[1-14]"; 当我在测试用例中测试它时,它按预期工作,下面是测试用例: @Test public void checkRegex() throws AssertionError { System.out.println("Checking the correctness of card regular expressions"); Strin
String RCARD1 = "[CDHS]{1}\\:\\d{1,2}[1-14]";
当我在测试用例中测试它时,它按预期工作,下面是测试用例:
@Test
public void checkRegex() throws AssertionError {
System.out.println("Checking the correctness of card regular expressions");
String RCARD1 = "[CDHS]{1}\\:\\d{1,2}[1-14]";
String cardSymbol = "H:14";
assertTrue(cardSymbol.matches(RCARD1));
cardSymbol = "C:16";
assertFalse(cardSymbol.matches(RCARD1));
cardSymbol = "Z:5";
assertFalse(cardSymbol.matches(RCARD1));
}
然而,当我将其用于卡构造函数时,它总是返回false。下面的代码稍微修改了一下,我没有检查结果,进一步的解密方法很好
public Card(String cardSymbol) throws UnknownCardException {
boolean res = cardSymbol.matches(RCARD1); //fails here !!!
if (this.decypherCard(cardSymbol)) {
}
else throw new UnknownCardException();
}
那么这里有什么问题?为什么不起作用?字符类仅与
1
和4
匹配。如果需要匹配从1
到14
的数字,请使用(?:1[0-4]| 0?[1-9])
这个正则表达式应该可以工作:
^[CDHS]:(?:1[0-4]|0?[1-9])$
看
注意:使用
String.matches()
,您不需要^
和$
(您可以从模式中删除它们)。您打算与[1-14]
匹配什么?您知道它只与1
和4
匹配吗?如果需要匹配1到14之间的数字,请使用(?:1[0-4]| 0?[1-9])
。看到了吗?这就是你所期望的吗?所以我实际上很幸运,我的测试意外地检查了H:14,这是这里唯一的有效值-谢谢