RegEx匹配不应该匹配的东西?

时间:2015-12-23 20:30:05

标签: java regex

我有一个相当简单的RegEx,它没有按照我的预期去做。

我希望RegEx与单字母字符串匹配,如果它们是您在表情符号中常见的几个元素之一,例如括号,冒号等

我偶然发现了一个问题标记导致我的RegEx火灾并且我不明白为什么。

我使用的是Java 8(Oracle),并针对我的问题进行了Junit测试:

@Test
public void test(){
    assertFalse(Pattern.matches("[:;-pP8xXdD\\(\\)]", "?"));
}

它应该评估为false,但它匹配,为什么?

1 个答案:

答案 0 :(得分:4)

;-p部分定义了从;(59)到p(112)的ASCII字符范围。这包括?(63)。 Reference

要解决此问题,请将-放在字符组的开头/结尾([]),或使用\转义。