Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Negating Regexes: Tips, Tools, And Tricks Of The Trade

by diotalevi (Canon)
on Dec 07, 2006 at 16:24 UTC ( #588384=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://588384]
help
Chatterbox?
NodeReaper patrols the perimeter

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2017-04-24 10:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I'm a fool:











    Results (438 votes). Check out past polls.