Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Pattern matching when there are exception strings

by tomazos (Deacon)
on Sep 21, 2005 at 14:16 UTC ( [id://493804]=note: print w/replies, xml ) Need Help??


in reply to Re: Pattern matching when there are exception strings
in thread Pattern matching when there are exception strings

Excuse me for being thick but suppose you had the exceptions '1ALPHA2' and '3ALPHA4'. Wouldn't $total_rx also exclude '3ALPHA2' and '1ALPHA4'? :) Or am I missing something?

Having said that I still think that lookahead and lookbehind are the best bet.

Just join them like this instead:

$total_raw = "(" . # WRONG join ("|", map ( "(?<!\Q$pre[$_]\E)ALPHA(?!\Q$suf[$_]\E)", (0..$#pre) ) ) . ")"; $total_rx = qr/$total_raw/;

(untested) Or something like that.

Update: Dooh. That doesn't work. Need an "and" match not an "or" match. Hmmmm... back to the drawing board.

Update: Okay, I've got it...

Can you nest lookaheads and lookbehinds? If so this should work:

$total_raw = "(?!(" . # CORRECT, MAYBE join ("|", map ( "(?<=\Q$pre[$_]\E)ALPHA(?=\Q$suf[$_]\E)", (0..$#pre) ) ) . "))ALPHA"; $total_rx = qr/$total_raw/;

This has a zero-width assertion followed by ALPHA.

The zero-width assertion is a lookahead exclude (ie looking ahead, that this is not true)

What it is looking ahead to see is one of multiple patterns.

Each pattern contains an ALPHA with a lookahead and behind for an excluded suffix and prefix pair. If one of these matches, we have an excluded alpha - so we exclude this match (the original zero-width assertion).

So it says: match an ALPHA that does not have an excluded prefix/suffix.

-Andrew.


Andrew Tomazos  |  andrew@tomazos.com  |  www.tomazos.com

Replies are listed 'Best First'.
Re^3: Pattern matching when there are exception strings
by japhy (Canon) on Sep 21, 2005 at 14:42 UTC
    Ah, right. Very good point. I wasn't thinking straight.

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://493804]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (1)
As of 2024-04-26 02:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found