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

use*_*970 3 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());
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*oni 8

您可以使用该UNICODE_CHARACTER_CLASS标志来\p{Punct}匹配所有Unicode标点符号.

  • ...假设你正在运行Java 7或更高版本,那就是. (3认同)