利用正则表达式的模式定位部分字符串并做出相应的修改。
m//模式匹配 是查找功能。
s///就是查找并替换的功能
s/barney/fred/;
#把barney替换为fred
-
用/g进行全局替换
s///只会进行一次替换。
s///g会进行所有可能的,不重复的替换 -
无损替换
需要同时保留原始字符串和替换后的字符串。
/r修饰符保留原来字符串变量中的值不变,把替换结果作为替换操作的返回值返回。
my $copy = $original =~ s/\d +ribs?/10/r
- 大小写转换
/U转义符把后面的所有字符都转换为大写。
/L转义符把后面的所有字符都转换为小写。
/l和/u只会影响后面的一个字符
s/(fred | barney)/\u$1/ig;
split操作符
根据给定的模式拆分字符串,用拆分模式扫描指定的字符串并返回字段。如果有两个分隔符连在一起,就会产生空字段。
my @fields = split /separator/,"abc:def::"
#得到("abc","def","")
- join函数
join函数和split相反,会把片段结合成一个字符串。
my $x = join ":",4,5,6,7;
#结果是"4:5:6:7"
更强大的正则表达式
- 非贪婪量词(在贪婪量词后面加?)
+? 在表示一次或多次的同时,也表示匹配的字符串越短越好
/fred.+barney/
#正则表达式引擎的回溯动作会很繁琐
/fred.+?barney/
- 跨行的模式匹配
模式加上/m修饰符后,就可以用来匹配字符串内的每一行。
open FILE,$filename
or die "can't open!";
my $lines = join ' ',<FILE>;
$lines =~ s/^/$filename: /gm;
从命令行直接编辑
perl -p -i.bak -w -e 's/Randall/Randal/g' fred*.dat
-p让perl自动生成一小段程序。
-i.bak是备份
-w开启警告
-e表面后面的是执行的程序代码
网友评论