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>