Java 某些标点符号与模式不匹配。已启用UNICODE\u字符\u类标志

Java 某些标点符号与模式不匹配。已启用UNICODE\u字符\u类标志,java,regex,unicode,pattern-matching,java-8,Java,Regex,Unicode,Pattern Matching,Java 8,启用Pattern.UNICODE\u CHARACTER\u类标志时,我在匹配某些标点符号时遇到问题 示例代码如下所示: final Pattern p = Pattern.compile("\\p{Punct}",Pattern.UNICODE_CHARACTER_CLASS); final Matcher matcher = p.matcher("+"); System.out.println(matcher.find()); 输出为false,尽管文档中明确指出p{Punct}包含如下

启用Pattern.UNICODE\u CHARACTER\u类标志时,我在匹配某些标点符号时遇到问题

示例代码如下所示:

final Pattern p = Pattern.compile("\\p{Punct}",Pattern.UNICODE_CHARACTER_CLASS);
final Matcher matcher = p.matcher("+");
System.out.println(matcher.find());
输出为false,尽管文档中明确指出p{Punct}包含如下字符!“#$%&'()*+,-./:?@[]^{124;}~

除了“+”符号外,以下字符也会出现同样的问题$+^`|~

当Pattern.UNICODE\u CHARACTER\u类被删除时,它可以正常工作

如果您能从以下网站获得有关该问题的任何提示,我将不胜感激:

指定此标志后,将预定义(仅限US-ASCII) 字符类和POSIX字符类符合 :兼容性属性

如果查看(Unicode技术标准)的“常规类别”属性,您将在“常规类别”属性下看到符号(
S
和子类别)和标点(
p
和子类别)之间的区别

引述:

最基本的整体特征属性是一般类别, 这是Unicode字符的基本分类:字母, 标点符号、符号、标记、数字、分隔符和其他

如果您使用
\\p{S}
尝试您的示例,且标志处于打开状态,则它将匹配


我的猜测是,
+
没有作为任意(但语义上适当)选择列在标点符号下,即字面上的标点符号!=符号。

javadoc声明了//p{punc}下的内容,并警告
POSIX字符类(仅限US-ASCII)

如果查看unicode中的标点字符,则没有+或$。请查看unicode中的标点字符