簡體   English   中英

Java RegEx 是否不區分大小寫?

[英]Is Java RegEx case-insensitive?

在 Java 中,當執行 replaceAll 以查找正則表達式模式時,例如:

replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); 

(刪除重復的連續不區分大小寫的單詞,例如測試測試),我不確定我把?i放在?i 我讀到它應該在開頭,但如果我把它拿出來,我會發現重復的連續單詞(例如 test test),但不是不區分大小寫的單詞(例如 Test test)。 所以我想我可以在開頭添加 ?i ,但這似乎並沒有完成工作。 有什么想法嗎? 謝謝!

您還可以匹配不區分大小寫的正則表達式,並通過使用 Pattern.CASE_INSENSITIVE 常量使其更具可讀性,例如:

Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE);
Matcher mymatcher= mypattern.matcher(mystring);

RegexBuddy告訴我是否要在開頭包含它,這是正確的語法:

"(?i)\\b(\\w+)\\b(\\s+\\1)+\\b"

是的,可以在 Java 正則表達式中隨意啟用和禁用不區分大小寫。

看起來你想要這樣的東西:

    System.out.println(
        "Have a meRry MErrY Christmas ho Ho hO"
            .replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
    );
    // Have a meRry Christmas ho

請注意,嵌入的Pattern.CASE_INSENSITIVE標志是(?i)而不是\\?i 另請注意,已從模式中刪除了一個多余的\\b

(?i)放置在模式的開頭以啟用不區分大小寫。 在這種特殊情況下,它不會在模式的后面被覆蓋,因此實際上整個模式是不區分大小寫的。

值得注意的是,實際上您可以將不區分大小寫限制為僅對整個模式的一部分。 因此,將它放在哪里的問題實際上取決於規范(盡管對於這個特定問題,它並不重要,因為\\w不區分大小寫。

為了演示,這里有一個類似的例子,將像"AaAaaA"類的字母折疊成"A"

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
    ); // A e I O u

現在假設我們指定只有以大寫字母開頭的運行才應該折疊。 然后我們必須將(?i)放在適當的位置:

    System.out.println(
        "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
            .replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
    ); // A eeEeeE I O uuUuUuu

更一般地說,您可以根據需要啟用和禁用模式中的任何標志。

也可以看看

相關問題

如果您的整個表達式不區分大小寫,則只需指定CASE_INSENSITIVE標志:

Pattern.compile(regexp, Pattern.CASE_INSENSITIVE)

您還可以將要檢查模式匹配的初始字符串引導為小寫。 並分別在您的模式中使用小寫符號。

暫無
暫無

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

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