s/// is the most common expression using RE to do "search and replace".
s/patten/replace/ searches the 'patten' and replaces it to 'replace'.
'patten' is the patten we talked in perlRE,it can be a variable though.
'replace' is the characters whichever you want to replace the result of search,it can be variable too.
'replace' is the characters whichever you want to replace the result of search,it can be variable too.
$_="He's out bowling with Barney tonight.";
s/Barney/Fred/; # Barney replaced by Fred
s/with (\w+)/agaist $1's team/;
print "$_\n";
s/Barney/Fred/; # Barney replaced by Fred
s/with (\w+)/agaist $1's team/;
print "$_\n";
s/// returns a value: replace success returns true,failure returns false.
$_="fred flintstone";
if(s/fred/wilma/){
print "Successfully replaced fred with wilma!\n";
print "$_\n";
}
if(s/fred/wilma/){
print "Successfully replaced fred with wilma!\n";
print "$_\n";
}
/g flag can replace all the result,instead of once by default.
$_="home,sweet home!";
s/home/cave/g;
print "$_\n";
s/home/cave/g;
print "$_\n";
$_=" Input data may have extra whitespace. ";
s/\s+/ /g;
print "$_\n";
s/\s+/ /g;
print "$_\n";
Above example is used to compress multiple whitespaces to one single space.
We can use other symbol in other then s///
$_=" Input data may have extra whitespace. ";
s<\s+>[ ]g;
s(^\s+)<>g;
s#\s+$##g;
print "$_\n";
s<\s+>[ ]g;
s(^\s+)<>g;
s#\s+$##g;
print "$_\n";
Note if use the patten symbols different from replace symbols,they need two pairs of () [] {} ... those pair'ed symbols. /// ### !!! ... those single don't have to.
Flags /i /x /s used in m// can also be used in s///
$_="hello 1
hello 2
wilma again
LOL
Fred,WILMA come on!
_ _END_ _
line 1
line 2
line 3";
s#wilma#Wilma#gi;
s{_ _END_ _.*}{}gs;
print;
hello 2
wilma again
LOL
Fred,WILMA come on!
_ _END_ _
line 1
line 2
line 3";
s#wilma#Wilma#gi;
s{_ _END_ _.*}{}gs;
print;
All wilma/wiLMA/WIlmA are replaced by Wilma,lines starting with '_ _END_ _' all are deleted.
Also,=~ can be used to replace variables other than $_ by default.
$file_name =~ s#^.*/##s; # remove all unix style path
/U changes all characters after it to upper case;
/L changes all characters after it to lower case;
/E close the window of /U or /L;
/u changes one character after it to upper case;
/l changes one character after it to loser case;
/u/L changes one character after it to upper case and all other characters to lower case;
/l/U changes one character after it to lower case and all other characters to upper case.
/L changes all characters after it to lower case;
/E close the window of /U or /L;
/u changes one character after it to upper case;
/l changes one character after it to loser case;
/u/L changes one character after it to upper case and all other characters to lower case;
/l/U changes one character after it to lower case and all other characters to upper case.
$_ =“I saw Barney with Fred.”;
s/(fred|barney)/\U$1/gi;
s/(fred|barney)/\U$1/gi;
$_="I saw barney with FREd.";
s/(\w+) with (\w+)/\u\L$2\E with \u\L$1/i;
print "$_\n";
s/(\w+) with (\w+)/\u\L$2\E with \u\L$1/i;
print "$_\n";
They can be used in " " as well:
$name="fred flintstone";print "Hello,\L\u$name\E,would you LIKE to play a game?\n";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。