Ajey Kulkarni <[EMAIL PROTECTED]> wrote:

: Subject: hi..

<sarcasm>
    Great subject. So much better than "Need help with regex"
or "Need to escape []". Always keep us guessing.
</sarcasm>

: i want to 'insert' an escape character for every '[' & ']' 
: i will find in a variable..
:
: Suppose $temp has a word which might contain [ and/or ].
: Eg: if $temp has hello]
: the modified temp should have hello\]
: 
: if $value  has [hello] i want the result to be \[hello\]. 
: 
: Is there a quick one line regex to do this?
: i'm able to match the presence of [ & ]
: if( (/\[/)|(/\]/) ){
:          my $value = $_;
:          $value =~ s/\[/\\\[/;
:          $value =~ s/\]/\\\]/;
:          print $value;
:         }

    A one-liner is not necessarily better. You might want
to test. The substitution operator has a pattern on the
left side and a replacement string on the other. According
to 'perlop' it takes this form:

  s/PATTERN/REPLACEMENT/egimosx


    Let's take a look at your phrase:

    s/\[/\\\[/


    The PATTERN is '\[' and the REPLACEMENT is "\\\[". I
put the REPLACEMENT in double quotes because that is how
it is most commonly interpolated. To print '\[' we need
"\\[" on the REPLACEMENT side.


    The PATTERN side views '[', and ']' as special
characters. So we need to escape them or we need to use
some other means to describe them. To look for more than
one we can place them in a character class: [\[\]] or as
[\][] then capture the one we match: ([\][]).

  s/([\][])/\\$1/

    We could also avoid the character class and use:

  s/(\]|\[)/\\$1/


    To capture multiple instances in the line we add 'g'.

  s/([\][])/\\$1/g


    And to make it easier to read we add x:

$value =~
    s/          # start substitution
        (           # capture match in $1
            [\][]       # character class for [ and ]
        )           # end capture
    /\\$1/gx;   # replace with \[ or \] globally


    Having said all this. I would still prefer Rob's
solution with two separate regexes in a 'foreach'.


HTH,

Charles K. Clarkson
-- 
Head Bottle Washer,
Clarkson Energy Homes, Inc.
Mobile Home Specialists
254 968-8328


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to