簡體   English   中英

不區分大小寫的POSIX正則表達式在Java Pattern&Matcher中不區分大小寫

[英]Case-insensitive POSIX regex is not case-insensitive in Java Pattern & Matcher

我不是Regex的專家,可能是顯而易見的原因,但是我找不到答案。

我使用POSIX表示法,以不區分大小寫的方式在Java中使用Regex匹配字符串( n )。 鑒於:

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

為什么以下代碼導致false

boolean find = matcher.find();

Pattern文檔中,我發現了以下內容(強調了我的意思):

\\ p {Upper}大寫字母字符: [AZ]

經過Regex [AZ]測試,以下結果為true

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

有什么區別?

無論是對還是錯-Posix字符類都會忽略CASE_INSENSITIVE標志。 盡管\\p{Upper}作用類似於[AZ] ,但它並不完全相同-也不考慮不區分大小寫的標志。

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);
    }
}

從POSIX規范(IEEE 1003):

9.2正則表達式一般要求

當使用正則表達式的標准實用程序或函數指定執行模式匹配時,不考慮數據或模式的大小寫(大寫或小寫),則當字符串中的每個字符都與模式匹配時,不僅字符,也應匹配其對應的案子(如果有)。

使用POSIX字符類時, Pattern.CASE_INSENSITIVE不會使其忽略大小寫對應檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM