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>