eyepopslikeamosquito has asked for the wisdom of the Perl Monks concerning the following question:
Want to convert this:
abc "a\"bc$xyz$abc$x$y" $bla'h, $blah hello k\$nob this is "\"'abc$xy$z\"" test "$" a$$bc "$$abc$xyz$abc$" blah, $$, blah
to:
abc "a\"bc\$xyz\$abc\$x\$y" $bla'h, $blah hello k\$nob this is "\"'abc\$xy\$z\"" test "\$" a$$bc "\$\$abc\$xyz\$abc\$" blah, $$, blah
That is, escape (with \) all $ but only if they occur inside double-quoted strings. Here is my attempt:
my $str = <<'EOS'; abc "a\"bc$xyz$abc$x$y" $bla'h, $blah hello k\$nob this is "\"'abc$xy$z\"" test "$" a$$bc "$$abc$xyz$abc$" blah, $$, blah EOS print "$str\n\n"; # $qq matches a double quoted string. my $qq = qr/"[^"\\]*(?:\\.[^"\\]*)*"/; # Break $str into fields (quoted or unquoted). my @fields = $str =~ /$qq|[^"]+/g; # Escape $ in quoted fields only. /^"/ && s/\$/\\\$/g for @fields; print @fields;
Improvements/alternative approaches welcome.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Escape $ inside quotes only
by pzbagel (Chaplain) on May 07, 2003 at 04:18 UTC | |
by tye (Sage) on May 07, 2003 at 06:25 UTC | |
by eyepopslikeamosquito (Archbishop) on May 07, 2003 at 07:24 UTC | |
by Aristotle (Chancellor) on May 07, 2003 at 06:12 UTC | |
by eyepopslikeamosquito (Archbishop) on May 07, 2003 at 05:03 UTC | |
|
Re: Escape $ inside quotes only
by BrowserUk (Patriarch) on May 07, 2003 at 03:56 UTC | |
by eyepopslikeamosquito (Archbishop) on May 07, 2003 at 04:57 UTC | |
|
Re: Escape $ inside quotes only
by Abigail-II (Bishop) on May 07, 2003 at 14:34 UTC | |
|
Re: Escape $ inside quotes only
by eyepopslikeamosquito (Archbishop) on May 07, 2003 at 06:23 UTC |