--- Rene Verharen <[EMAIL PROTECTED]> wrote: > Hi, > > In one of my scripts I do a search and replace like this > : > > $text =~ s/$search/$replace/; > > This works fine, but if $search or $replace contains > one or more words between round brackets () it doesn't > what I had in mind : > > $text = "This is a text (with brackets)..."; > $rearch = "(with brackets)"; > $replace = "without brackets"; > $text =~ s/$search/$replace/; > print $text; > > If I run this example it prints : This is a text > (without brackets)... > > Where did I go wrong ?
Mistyping $search? :P But that isn't the whole story... $search and $replace are interpolated into the regex, not as just a string but PART OF THE REGEX. This means you really have: $text =~ s/(with brackets)/without brackets/; when you really wanted: $text =~ s/\(with brackets\)/without brackets/; You can obviously put those escapes in, or alternatively use: $search = quotemeta "(with brackets)"; which does that bit of work for you. Removing bracket pairs (not nested), can be done using: $text =~ s/\(([^)])*\)/$1/g; which means: $text =~ s/\( # Match an opening bracket ([^)])* # Capture non closing bracket # characters and store into $1 \) # Match a closing bracket / $1 # Replace all we've matched # with $1 /g; # Option: Global replace Take care, Jonathan Paton __________________________________________________ Do You Yahoo!? Everything you'll ever need on one web page from News and Sport to Email and Music Charts http://uk.my.yahoo.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]