regexregex-lookarounds

Regex lookahead, lookbehind and atomic groups


I found these things in my regex body but I haven't got a clue what I can use them for. Does somebody have examples so I can try to understand how they work?

(?=) - positive lookahead
(?!) - negative lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind

(?>) - atomic group

Solution

  • 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)A
    

    Look behind negative (?<!)

    Find expression A where expression B does not precede:

    (?<!B)A
    

    Atomic groups (?>)

    An atomic group exits a group and throws away alternative patterns after the first matched pattern inside the group (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.

    Some resources

    Online testers