代码之家  ›  专栏  ›  技术社区  ›  Nikolas Charalambidis

不区分大小写的POSIX正则表达式在Java模式和匹配器中不区分大小写

  •  1
  • Nikolas Charalambidis  · 技术社区  · 6 年前

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

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

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

    为什么下面的代码会导致 false ?

    boolean find = matcher.find();
    

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

    \p{Upper} 大写字母字符: [A-Z]

    根据正则表达式进行测试 [A-Z] true :

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

    有什么区别?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Erwin Bolwidt    6 年前

    无论是对还是错,Posix字符类都会忽略 CASE_INSENSITIVE \p{Upper} [A-Z]

    Pattern 检查posic字符类的类不引用 不区分大小写

    /**
     * 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);
        }
    }
    
        2
  •  1
  •   tax1driver    6 年前

    9.2正则表达式一般要求

    当使用正则表达式的标准实用程序或函数指定执行模式匹配时,不考虑数据或模式的大小写(大写或小写),则当字符串中的每个字符与模式匹配时,不仅应匹配字符,还应匹配其大小写对应项(如果有)。

    使用POSIX字符类时, Pattern.CASE_INSENSITIVE 不会让它忽略案例对应检查。