Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: how can I combine these expressions?

by plaid (Chaplain)
on Jul 27, 2000 at 03:27 UTC ( #24598=note: print w/replies, xml ) Need Help??


in reply to how can I combine these expressions?

How about this:
$str =~ s/(^|[^\%](?:\%\%)*)\% (\{)? # Match and capture 1 or 0 braces ([_a-zA-Z]\w*) (?(2)\}) # If there's anything in $2, match en +ding brace /"$1".$env->{$3}/gex; # $3 now instead of $2 here
This takes advantage of perl's conditional matching operator. From perlre:
(?(condition)yes-pattern|no-pattern) (?(condition)yes-pattern) Conditional expression. (condition) should be either an integer in parentheses (which is valid if the corresponding pair of parentheses matched), or lookahead/lookbehind/evaluate zero-width assertion. Say, m{ ( \( )? [^()]+ (?(1) \) ) }x matches a chunk of non-parentheses, possibly included in parentheses themselves.

Replies are listed 'Best First'.
(Ovid) RE(2): how can I combine these expressions?
by Ovid (Cardinal) on Jul 27, 2000 at 03:47 UTC
    I am humbled in the presence of greatness. :) That was slick.
RE: Re: how can I combine these expressions?
by knight (Friar) on Jul 27, 2000 at 20:29 UTC
    Plaid--

    Stellar. That's exactly what I needed. Many thanks.

    (Note on some of the replies above: Simple alternation with '|' doesn't work because it includes the braces in the selected part of the regex. Given %{FOO}, we should interpolate $env->{'FOO'}, not $env->{'{FOO}'}.)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2022-01-27 11:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:












    Results (70 votes). Check out past polls.

    Notices?