Hone

Lessons · Regex · (?i): a flag inside the pattern

A flag written inside the pattern

(?i) at the front turns on case-insensitive matching for the whole pattern; (?i:...) turns it on for just that group.

Hone is a place to practise programming. This is one of its lessons, written out in full and free to read without an account.

What it is for

A pattern kept in a config file or a database column has nowhere to pass a flag. Written inside, it carries its own settings.

How to think about it

Whole pattern, or one part? The bare form must be at the very start; the scoped form goes where it applies and means what it looks like.

Worked example

re.search(r'(?i)hello', 'HELLO').group()
The whole pattern, relaxed about case.
re.search(r'(?i:ab)c', 'ABc').group()
Only the ab is relaxed; the c is not.
re.search(r'(?i:ab)c', 'ABC')
Which is why this finds nothing.

Your turn

Relax the case of the ab only, not the c.

(?:ab)c

The trap

A bare (?i) anywhere but the start raises 'global flags not at the start of the expression'. Partway through, the scoped form is the only one.

Next in Regex

Every Regex lesson on one page

Practise (?i): a flag inside the pattern on HoneA question on it now, a coding challenge where there is one, and it is remembered for review. Free, no email needed.