Chapter 9. Processing Text with Regular Expressions
You can use regular expressions to change text too. So far we’ve only shown you how to match a pattern, and now we’ll show you how to use patterns to locate the parts of strings that you want to change.
Substitutions with s///
If you think of the m// pattern
match as being like your word processor’s “search” feature, the “search
and replace” feature would be Perl’s s/// substitution operator. This simply replaces whatever part of
a variable[20] matches a pattern with a replacement string:
$_ = "He's out bowling with Barney tonight."; s/Barney/Fred/; # Replace Barney with Fred print "$_\n";
If the match fails, nothing happens, and the variable is untouched:
# Continuing from above; $_ has "He's out bowling with Fred tonight." s/Wilma/Betty/; # Replace Wilma with Betty (fails)
Of course, both the pattern and the replacement string could be
more complex. Here, the replacement string uses the first memory
variable, $1, which is set by the
pattern match:
s/with (\w+)/against $1's team/; print "$_\n"; # says "He's out bowling against Fred's team tonight."
Here are some other possible substitutions. (These are here only as samples; in the real world, it would not be typical to do so many unrelated substitutions in a row.)
$_ = "green scaly dinosaur"; s/(\w+) (\w+)/$2, $1/; # Now it's "scaly, green dinosaur" s/^/huge, /; # Now it's "huge, scaly, green dinosaur" s/,.*een//; # Empty replacement: Now it's "huge dinosaur" s/green/red/; # Failed match: ...