正则表达式\ p {Punct}错过了java中的unicode标点符号

时间:2014-04-10 22:21:10

标签: java regex unicode

我写了一个小测试来演示

@Test
public void missingPunctuationRegex() {
    Pattern punct = Pattern.compile("[\\p{Punct}]");

    Matcher m = punct.matcher("'");
    assertTrue("ascii puctuation", m.find());

    m = punct.matcher("‘");
    assertTrue("unicode puctuation", m.find());
}

第一个断言通过,第二个失败。你可能不得不眯着眼睛看它,但这就是“左单引号”(U+2018),据我所知,它应该作为一个标点符号。

如何匹配Java正则表达式中的所有标点符号?

2 个答案:

答案 0 :(得分:8)

您可以使用UNICODE_CHARACTER_CLASS标记使\p{Punct}与所有Unicode标点符合。

答案 1 :(得分:0)

Javadoc of Pattern

  

\p{Punct}标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_ {|}〜“

之一

您必须明确地将其匹配,因为它不被视为\p{Punct}的一部分。

Pattern punct = Pattern.compile("[\\p{Punct}‘]");