600

How can I make the following regex ignore case sensitivity? It should match all the correct characters but ignore whether they are lower or uppercase.

G[a-b].* 
7
  • Just have both the uppercase and lowercase included in the regex or convert to uppercase before doing the regex matching Commented Mar 11, 2012 at 13:05
  • 2
    G[a-bA-B].* would be the obvious in this general case, case sensitivity is afaik platform dependent and you're not giving a platform. Commented Mar 11, 2012 at 13:07
  • 26
    If you're using Java, you can specify this with the Pattern class: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);. Commented Aug 6, 2014 at 14:06
  • More Java options here: blogs.oracle.com/xuemingshen/entry/… Commented Aug 6, 2014 at 14:08
  • 2
    Note that for greping it is simply the addition of the -i modifier. Ex: grep -rni regular_expression to search for this 'regular_expression' 'r'ecursively, case 'i'nsensitive, showing line 'n'umbers in the result. Commented Oct 17, 2018 at 22:24

15 Answers 15

738

Assuming you want the whole regex to ignore case, you should look for the i flag. Nearly all regex engines support it:

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

Check the documentation for your language/platform/tool to find how the matching modes are specified.

If you want only part of the regex to be case insensitive (as my original answer presumed), then you have two options:

  1. Use the (?i) and [optionally] (?-i) mode modifiers:

    (?i)G[a-b](?-i).* 
  2. Put all the variations (i.e. lowercase and uppercase) in the regex - useful if mode modifiers are not supported:

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

One last note: if you're dealing with Unicode characters besides ASCII, check whether or not your regex engine properly supports them.

Sign up to request clarification or add additional context in comments.

8 Comments

Brilliant! Works for: perl -pe 's/^utf-8\?B\?.*$//gi' Cancer.1631, matching/replacing string "UTF-8?B?" in file Cancer.1631. This fails: perl -pe 's/^utf-8\?B\?.*$//g' Cancer.1631, due to the case mismatch.
This post would much clearer if it wasn't such a specific example. Like what if you want to ignore case for another word such as ".txt" and ".TXT". From looking at this answer I'm still unsure how I could do this.
For some reason the regex that you posted doesn't work in find extended regex.. for example find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \) doesn't show any folders.. white a similar reged find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \) without the modifiers does show the correct folders. Any idea why?
Here I am trying to find all the folders starting with characters [a-c] in the current folder only.. to do some more manipulation..
Honestly I'd put option 2 in the main part of the answer as it is generic and works with all regex engines.
|
322

Depends on implementation but I would use

(?i)G[a-b]. 

VARIATIONS:

(?i) case-insensitive mode ON (?-i) case-insensitive mode OFF 

Modern regex flavors allow you to apply modifiers to only part of the regular expression. If you insert the modifier (?im) in the middle of the regex then the modifier only applies to the part of the regex to the right of the modifier. With these flavors, you can turn off modes by preceding them with a minus sign (?-i).

Description is from the page: https://www.regular-expressions.info/modifiers.html

7 Comments

This is the modifier format for TortoiseHg's Search regex engine.
Could you tell me how this can be achieved in Linux shell (say in egrep without using the "-i" switch) generically?
Explaining what the (?i) does and how to end it ((?-i)) would have been really helpful. That's hands-down why your answer has 1/3 as many votes as the #1 question instead of almost as many, as they explain this subtle detail.
For who is using pypi.org/project/regex, using (?i) in a regex which belongs to a regex composition (i.e. join of regex with ORs) will give to it an higher priority with respect the others (i.e. the order will be no more the same ad the regex are written)
Works for me in .NET/C#.
|
110

regular expression for validate 'abc' ignoring case sensitive

(?i)(abc) 

8 Comments

Works perfectly with Android Studio logcat
Works in python too
Works in C# as well
Works in maXbox as well: writeln(ReplaceRegExpr('(?i)\bsubstring\b',loadfile,'newstring',false));
Works fine in Java.
|
60

The i flag is normally used for case insensitivity. You don't give a language here, but it'll probably be something like /G[ab].*/i or /(?i)G[ab].*/.

1 Comment

How can i make it works for gàble. check this demo.
18

Just for the sake of completeness I wanted to add the solution for regular expressions in C++ with Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase); if (std::tr1::regex_match(szString, pattern)) { ... } 

2 Comments

Can someone clarify to me why this post was downvoted? The accepted solution uses specific code and for the sake of completeness I wanted to add the solution for the standard libraries of the language c++. In my opinion I have generated added value to a more general question.
szPattern is OP's G[a-b].* whereas szString is the string to test
10

In JavaScript you should pass the i flag to the RegExp constructor as stated in MDN:

const regex = new RegExp('(abc)', 'i'); regex.test('ABc'); // true 

Comments

8

JavaScript

If you want to make it case insensitive just add i at the end of regex:

'Test'.match(/[A-Z]/gi) //Returns ["T", "e", "s", "t"]

Without i

'Test'.match(/[A-Z]/g) //Returns ["T"]

1 Comment

I checked the first regex, but it doesn't work for lattin character, here is the demo.
6

C#

using System.Text.RegularExpressions; ... Regex.Match( input: "Check This String", pattern: "Regex Pattern", options: RegexOptions.IgnoreCase) 

specifically: options: RegexOptions.IgnoreCase

Comments

5

As I discovered from this similar post (ignorecase in AWK), on old versions of awk (such as on vanilla Mac OS X), you may need to use 'tolower($0) ~ /pattern/'.

IGNORECASE or (?i) or /pattern/i will either generate an error or return true for every line.

Comments

3

[gG][aAbB].* probably simples solution if the pattern is not too complicated or long.

3 Comments

would love to know why this answer is wrong for the given question?
You have it in your answer "is not too complicated or long"
This is actually the only solution that worked for my case. Also it looks like the most generic solution that should work everywhere. All other answers seem to be very specific for particular regex implementations.
2

Addition to the already-accepted answers:

Grep usage:

Note that for greping it is simply the addition of the -i modifier. Ex: grep -rni regular_expression to search for this 'regular_expression' 'r'ecursively, case 'i'nsensitive, showing line 'n'umbers in the result.

Also, here's a great tool for verifying regular expressions: https://regex101.com/

Ex: See the expression and Explanation in this image.

enter image description here

References:

Comments

2

Kotlin:

"G[a-b].*".toRegex(RegexOption.IGNORE_CASE) 

Comments

1

In Java, Regex constructor has

Regex(String pattern, RegexOption option) 

So to ignore cases, use

option = RegexOption.IGNORE_CASE 

Comments

-3

You also can lead your initial string, which you are going to check for pattern matching, to lower case. And using in your pattern lower case symbols respectively .

Comments

-5

You can practice Regex In Visual Studio and Visual Studio Code using find/replace.

You need to select both Match Case and Regular Expressions for regex expressions with case. Else [A-Z] won't work.enter image description here

Visual Studio 2019 Community

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.