in reply to Negating Regexes: Tips, Tools, And Tricks Of The Trade

I'd prefer to use this instead of Sidhekin's because it lets your pattern start it's match normally and doesn't require retrying at ever offset. The following lets the pattern match however it normally would but fails when it succeeds.

/(?(??{...})(?!))/;

In Perl 5.10, this is especially nice [Updated: Oops. Forgot the (?:...|) to have a success branch]

/...(*COMMIT)(?!)/;/(?:...(*COMMIT)(?!)|)/

⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

Replies are listed 'Best First'.
Re^2: Negating Regexes: Tips, Tools, And Tricks Of The Trade
by demerphq (Chancellor) on Dec 07, 2006 at 17:33 UTC

    I'm not so sure that your example works as it stands. You'd need a code block to distinguish between true failure and false failure.

    In perl 5.10 you could do it like:

    if ( ! /...(*COMMIT:x)(*FAIL)/ && $REGERROR ne 'x' ) { ... }

    To be honest I need to think about how $REGERROR will work in the context of complete failure. For instance when failure occurs because of the optimiser. Hmm.

    ---
    $world=~s/war/peace/g