我写了一个小测试来演示
@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正则表达式中的所有标点符号?
答案 0 :(得分:8)
您可以使用UNICODE_CHARACTER_CLASS
标记使\p{Punct}
与所有Unicode标点符合。
答案 1 :(得分:0)
之一
\p{Punct}
标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_
{|}〜“
您必须明确地将其匹配,因为它不被视为\p{Punct}
的一部分。
Pattern punct = Pattern.compile("[\\p{Punct}‘]");