gpt4 book ai didi

java - 不区分大小写的 POSIX 正则表达式在 Java Pattern & Matcher 中不区分大小写

转载 作者:行者123 更新时间:2023-11-30 01:57:26 25 4
gpt4 key购买 nike

我不是正则表达式专家,这可能是一个明显的原因,但我找不到答案。

我使用 Java 中的正则表达式以不区分大小写的方式使用 POSIX 表示法来匹配字符串 (n)。鉴于:

Pattern pattern = Pattern.compile("\\p{Upper}", Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher("n");

为什么以下代码会导致false

boolean find = matcher.find();

Pattern文档中,我发现了以下内容(强调我的):

\p{Upper} An upper-case alphabetic character: [A-Z]

针对正则表达式 [A-Z] 进行测试,以下结果为 true:

Pattern pattern = Pattern.compile("[A-Z]", Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher("n");
boolean find = matcher.find();

有什么区别?

最佳答案

无论正确还是错误 - Posix 字符类都会忽略 CASE_INSENSITIVE 标志。尽管 \p{Upper} 的工作方式与 [A-Z] 类似,但它并不完全相同 - 并且它不考虑不区分大小写的标志。

Pattern 类中检查 posic 字符类的代码不引用 CASE_INSENSITIVE 标志:

/**
* Node class that matches a POSIX type.
*/
static final class Ctype extends BmpCharProperty {
final int ctype;
Ctype(int ctype) { this.ctype = ctype; }
boolean isSatisfiedBy(int ch) {
return ch < 128 && ASCII.isType(ch, ctype);
}
}

关于java - 不区分大小写的 POSIX 正则表达式在 Java Pattern & Matcher 中不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907748/

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