gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:03 25 4
gpt4 key购买 nike

当启用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com