thanks Charles.I will give the ryt subject next time.

On Fri, 2 Jan 2004, Charles K. Clarkson wrote:

> 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>
> 
> 
> 


-- 
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