2012-03-11 49 views
155

如何讓以下正則表達式忽略區分大小寫?它應該匹配所有正確的字符,但忽略它們是低位還是大寫。正則表達式:忽略區分大小寫

G[a-b].* 
+0

在執行正則表達式匹配 – 2012-03-11 13:05:58

+0

G [a-bA-B]之前,只需在正則表達式中包含大寫字母和小寫字母或將其轉換爲大寫字母即可。*在這種一般情況下將是明顯的,區分大小寫依賴於平臺,並且您沒有提供平臺。 – 2012-03-11 13:07:56

+8

如果您使用的是Java,則可以使用Pattern類指定它:'Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);'。 – 2014-08-06 14:06:22

回答

229

假設您希望整個正則表達式忽略大小寫,您應該查找i flag。幾乎所有的正則表達式引擎支持它:

/G[a-b].*/i 

string.match("G[a-b].*", "i") 

檢查你的語言/平臺/工具的文檔以瞭解如何指定的匹配模式。

如果你想在正則表達式的唯一部分爲區分大小寫(因爲我原來的答覆假設),那麼你有兩個選擇:

  1. 使用(?i)和[可選] (?-i)模式修飾符:

    (?i)G[a-b](?-i).* 
    
  2. 把所有的變化(即小寫和大寫)在正則表達式 - 如果不支持模式改進劑:

    最後
    [gG][a-bA-B].* 
    

一個注意:如果你使用Unicode字符的處理,除了ASCII,檢查你的正則表達式引擎是否合適地支持他們。

+0

輝煌! Works for:perl -pe's/^ utf-8 \?B \?。* $ // gi'Cancer.1631,匹配/替換字符串「UTF-8?B?」在檔案Cancer.1631。這失敗了:perl -pe's/^ utf-8 \?B \?。* $ // g'Cancer.1631,由於案例不匹配。 – 2018-01-18 01:26:10

43

i的標誌通常是用於區分大小寫。你不會在這裏提供一種語言,但它可能會像/G[a-b].*/i

78

取決於實現 ,但我會用

(?i)G[a-b]. 
+0

這是TortoiseHg搜索正則表達式引擎的修飾符格式。 – mwolfe02 2015-03-12 14:08:42

+0

你能告訴我如何在Linux shell中實現這個功能(比如在不使用「-i」開關的情況下在egrep中)? – 2015-09-05 00:58:58

+0

這完美在C# – 2017-02-23 09:09:44

13

只是爲了完整起見,我想增加對正則表達式的解決方案在C++中使用Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase); 

if (std::tr1::regex_match(szString, pattern)) 
{ 
... 
} 
+1

有人可以澄清爲什麼這篇文章downvoted?接受的解決方案使用特定的代碼,爲了完整起見,我想爲C++語言的標準庫添加解決方案。在我看來,我已經爲更普遍的問題產生了附加價值。 – Frankenstein 2013-08-07 06:24:44

0

您也可以導致你的初始字符串,你要檢查模式匹配,小寫。並分別在您的模式中使用小寫符號。

3

正如我在類似文章(ignorecase in AWK)中發現的,在舊版本的awk上(例如在香草Mac OS X上),您可能需要使用'tolower($0) ~ /pattern/'

IGNORECASE(?i)/pattern/i將產生一個錯誤或每行返回true。爲驗證 'ABC' 忽略大小寫敏感

26

正則表達式

(?i)(abc) 
+1

這似乎工作得特別好,如果你正在使用Java ... – LAK 2016-06-20 15:17:31

+0

與Android Studio完美搭配logcat – Joe 2017-08-25 14:23:52

-1

[gG的] [AABB] *如果模式是不是太複雜或長大概simples溶液。

+0

想知道爲什麼這個答案對於給定的問題是錯誤的嗎? – 2017-12-24 16:17:45