[英]Why cant I use Pattern.UNICODE_CHARACTER_CLASS in My Android App?
[英]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.