Lookahead & Lookbehind RegExp Cheat Sheet
Examples
Given the string foobarbarfoo:
bar(?=bar) finds the 1st bar ("bar" which has "bar" after it)
bar(?!bar) finds the 2nd bar ("bar" which does not have "bar" after it)
(?<=foo)bar finds the 1st bar ("bar" which has "foo" before it)
(?<!foo)bar finds the 2nd bar ("bar" which does not have "foo" before it)You can also combine them:
(?<=foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it)Definitions
Look ahead positive (?=)
Find expression A where expression B follows:
A(?=B)Look ahead negative (?!)
Find expression A where expression B does not follow:
A(?!B)Look behind positive (?<=)
Find expression A where expression B precedes:
(?<=B)ALook behind negative (?<!)
Find expression A where expression B does not precede:
(?<!B)AAtomic groups (?>)
An atomic group exits a group and throws away alternative patterns after the first matched pattern inside the group (backtracking is disabled).
(?>foo|foot)sapplied tofootswill match its 1st alternativefoo, then fail assdoes not immediately follow, and stop as backtracking is disabled
A non-atomic group will allow backtracking; if subsequent matching ahead fails, it will backtrack and use alternative patterns until a match for the entire expression is found or all possibilities are exhausted.
(foo|foot)sapplied tofootswill:- match its 1st alternative
foo, then fail assdoes not immediately follow infoots, and backtrack to its 2nd alternative; - match its 2nd alternative
foot, then succeed assimmediately follows infoots, and stop. - then grouped as
footands
- match its 1st alternative
Non-capturing groups (?:)
capturing and no single groups。
example: foobarbarfoo
foo(?:bar) applied to foobarbarfoo will match foobar
foobar applied to foobarbarfoo will match foobar
foo(bar) applied to foobarbarfoo will match foobar then grouped as foo and bar