On Feb 5, David Mamanakis said:
>I am building a parsing routine, and am using a regular expression, which
>works, EXCEPT when I need to EXCLUDE certain things...
>
>$right =~ s/A/X/g;
>
>However, I may need to exclude this replacement in some of the values of
>$right...
>
>Anything found between < and > SHOULD NOT be replaced. \<.*\>
>Anything found between & and ; SHOULD NOT be replaced. \&.*\;
>Anything found between {$ and } SHOULD NOT be replaced. \{$.*\}
>Anything found between < and = SHOULD NOT be replaced. \<.*\=
Here's a crafty trick (from DALnet #perl a couple of minutes ago)...
$text =~ m{(<.*?>|&.*?;|{\$.*?}|<.*?=)|A}{$1 || "X"}seg;
Basically, if it's a special case, it's matched and put in $1, and if it's
"A", it's matched but $1 is undefined. Then, on the right-hand side, we
use $1 if it has a value, and "X" otherwise.
The /s is so that . matches newlines, the /e is so that $1 || "X" is
evaluated as code, and the /g is for all matches.
It kinda sounds like you're working with HTML and some template thing,
though... you might want to use a full HTML parser instead.
--
Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/
RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for? <tenderpuss> why, yansliterate of course.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]