- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当启用 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 被移除时,它工作正常
我将不胜感激关于该问题的任何提示
最佳答案
来自documentation :
When this flag is specified then the (US-ASCII only) Predefined character classes and POSIX character classes are in conformance with Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.
如果您查看 UTS35 的一般类别属性(Unicode 技术标准),您会在 table 中看到符号(S
和子类别)和标点符号(P
和子类别)之间的区别。在一般类别属性(property)下。
引用:
The most basic overall character property is the General Category, which is a basic categorization of Unicode characters into: Letters, Punctuation, Symbols, Marks, Numbers, Separators, and Other.
如果您使用 \\p{S}
尝试您的示例,并打开标志,它将匹配。
我的猜测是 +
没有作为任意(但在语义上是适当的)选择列在标点符号下,即字面上的标点符号!=符号。
关于java - 某些标点字符与启用的 Pattern.UNICODE_CHARACTER_CLASS 标志不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068513/
我是一名优秀的程序员,十分优秀!