繁体   English   中英

某些标点字符与Pattern.UNICODE_CHARACTER_CLASS标志启用不匹配

[英]Some punctuation characters are not matched with Pattern.UNICODE_CHARACTER_CLASS flag enabled

启用Pattern.UNICODE_CHARACTER_CLASS标志时,我遇到了匹配某些标点字符的问题。

示例代码如下:

final Pattern p = Pattern.compile("\\p{Punct}",Pattern.UNICODE_CHARACTER_CLASS);
final Matcher matcher = p.matcher("+");
System.out.println(matcher.find());

输出是错误的,尽管文档中明确指出p {Punct}包含的字符如!“#$%&'()* +, - 。/:; <=>?@ [] ^ _`{| }〜

除了'+'符号,后续字符$ + <=> ^`|〜也会出现同样的问题

当删除Pattern.UNICODE_CHARACTER_CLASS时,它工作正常

我将不胜感激任何有关该问题的提示

文档

指定此标志后,(仅限US-ASCII)预定义字符类和POSIX字符类符合Unicode技术标准#18:Unicode正则表达式附录C :兼容性属性。

如果您查看UTS35 (Unicode技术标准)的常规类别属性,您将在常规类别属性下的表格中看到符号( S和子类别)和标点符号( P和子类别)之间的区别。

引用:

最基本的整体字符属性是常规类别,它是Unicode字符的基本分类:字母,标点符号,符号,标记,数字,分隔符和其他。

如果您尝试使用\\\\p{S}示例,并打开标记,它将匹配。

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

javadoc说明了// p {punc}下的内容
POSIX字符类(仅限US-ASCII)

如果你看一下unicode中的标点字符,就没有+或$。 http://www.fileformat.info/info/unicode/category/Po/list.htm上查看 unicode中的标点字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM