| Grouping
and Backreferences |
| Syntax |
Description |
Example |
| (regex) |
Round brackets group the regex between them. They capture
the text matched by the regex inside them that can be reused in a
backreference, and they allow you to apply regex operators to the entire
grouped regex. |
(abc){3} matches abcabcabc. First group matches abc. |
| (?:regex) |
Non-capturing parentheses group the regex so you can apply
regex operators, but do not capture anything and do not create
backreferences. |
(?:abc){3} matches abcabcabc. No groups. |
| \1 through \9 |
Substituted with the text matched between the 1st through
9th pair of capturing parentheses. Some regex flavors allow more than 9
backreferences. |
(abc|def)=\1 matches abc=abc or def=def, but not abc=def or def=abc. |
| Modifiers |
| Syntax |
Description |
Example |
| (?i) |
Turn on case insensitivity for the remainder of the regular
expression. (Older regex flavors may turn it on for the entire regex.) |
te(?i)st matches teST but not TEST. |
| (?-i) |
Turn off case insensitivity for the remainder of the
regular expression. |
(?i)te(?-i)st matches TEst but not TEST. |
| (?s) |
Turn on "dot matches newline" for the remainder of the
regular expression. (Older regex flavors may turn it on for the entire
regex.) |
|
| (?-s) |
Turn off "dot matches newline" for the remainder of the
regular expression. |
|
| (?m) |
Caret and dollar match after and before newlines for the
remainder of the regular expression. (Older regex flavors may apply this
to the entire regex.) |
|
| (?-m) |
Caret and dollar only match at the start and end of the
string for the remainder of the regular expression. |
|
| (?i-sm) |
Turns on the options "i" and "m", and turns off "s" for the
remainder of the regular expression. (Older regex flavors may apply this
to the entire regex.) |
|
| (?i-sm:regex) |
Matches the regex inside the span with the options "i" and
"m" turned on, and "s" turned off. |
(?i:te)st matches TEst but not TEST. |
| Atomic
Grouping and Possessive Quantifiers |
| Syntax |
Description |
Example |
| (?>regex) |
Atomic groups prevent the regex engine from backtracking
back into the group (forcing the group to discard part of its match) after
a match has been found for the group. Backtracking can occur inside the
group before it has matched completely, and the engine can backtrack past
the entire group, discarding its match entirely. Eliminating needless
backtracking provides a speed increase. Atomic grouping is often
indispensable when nesting quantifiers to prevent a catastrophic amount of
backtracking as the engine needlessly tries pointless permutations of the
nested quantifiers. |
x(?>\w+)x is more efficient than
x\w+x if the second x cannot be matched. |
| ?+, *+, ++ and
{m,n}+ |
Possessive quantifiers are a limited yet syntactically
cleaner alternative to atomic grouping. Only available in a few regex
flavors. They behave as normal greedy quantifiers, except that they will
not give up part of their match for backtracking. |
x++ is identical to (?>x+) |
| Lookaround |
| Syntax |
Description |
Example |
| (?=regex) |
Zero-width positive lookahead. Matches at a position where
the pattern inside the lookahead can be matched. Matches only the
position. It does not consume any characters or expand the match. In a
pattern like one(?=two)three, both two and three have to match at the
position where the match of one ends. |
t(?=s) matches the second t in streets. |
| (?!regex) |
Zero-width negative lookahead. Identical to positive
lookahead, except that the overall match will only succeed if the regex
inside the lookahead fails to match. |
t(?!s) matches the first t in streets. |
| (?<=text) |
Zero-width positive lookbehind. Matches at a position to
the left of which text appears. Since regular expressions cannot be
applied backwards, the test inside the lookbehind can only be plain text.
Some regex flavors allow alternation of plain text options in the
lookbehind. |
(?<=s)t matches the first t in streets. |
| (?<!text) |
Zero-width negative lookbehind. Matches at a position if
the text does not appear to the left of that position. |
(?<!s)t matches the second t in streets. |
| Continuing
from The Previous Match |
| Syntax |
Description |
Example |
| \G |
Matches at the position where the previous match ended, or
the position where the current match attempt started (depending on the
tool or regex flavor). Matches at the start of the string during the first
match attempt. |
\G[a-z] first matches a, then matches b and then fails to
match in ab_cd. |
| Conditionals |
| Syntax |
Description |
Example |
| (?(?=regex)then|else) |
If the lookahead succeeds, the "then" part must match for
the overall regex to match. If the lookahead fails, the "else" part must
match for the overall regex to match. Not just positive lookahead, but all
four lookarounds can be used. Note that the lookahead is zero-width, so
the "then" and "else" parts need to match and consume the part of the text
matched by the lookahead as well. |
(?(?<=a)b|c) matches the second b and the first c in babxcac |
| Comments |
| Syntax |
Description |
Example |
| (?#comment) |
Everything between (?# and ) is ignored
by the regex engine. |
a(?#foobar)b matches ab |