Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式匹配它不应该匹配的东西?_Java_Regex - Fatal编程技术网

Java 正则表达式匹配它不应该匹配的东西?

Java 正则表达式匹配它不应该匹配的东西?,java,regex,Java,Regex,我有一个相当简单的正则表达式,它不做我期望它做的事情 我想要一个匹配单字母字符串的正则表达式,如果它们是smilies中常见的几个元素之一,例如括号、冒号等 我无意中遇到了一个案例,一个问号让我的正则表达式着火了,我不明白为什么 我使用Java 8(Oracle)并对我的问题进行了Junit测试: @Test public void test(){ assertFalse(Pattern.matches("[:;-pP8xXdD\\(\\)]", "?")); } 它应该求值为fals

我有一个相当简单的正则表达式,它不做我期望它做的事情

我想要一个匹配单字母字符串的正则表达式,如果它们是smilies中常见的几个元素之一,例如括号、冒号等

我无意中遇到了一个案例,一个问号让我的正则表达式着火了,我不明白为什么

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

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

它应该求值为false,但它匹配,为什么?

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


要修复它,请将
-
放在字符组(
[]
)的开始/结束处,或使用
\
转义
-p
部分定义了
中ASCII字符的范围(59)到
p
(112)。这包括
(63)


要修复它,请将
-
放在字符组(
[]
)的开始/结束处,或使用
\
转义为
\-

是,它应该是
\-
,因为
-
是一个表示rangeyes的特殊字符,它应该是
\-
,因为
-
是一个表示范围的特殊字符。我认为您需要转义
-
。否则,它会认为这是一个范围。我认为您需要避开
-
。否则,它会认为这是一个范围。