-1-----------------------------------------------------------------------------------------------------------------
用s///进行替换
s/// 找查并替换
$_="test meng";
if(s/test/wang/) #查找并test并将其替换wang
{
print "$_\n";
}
用/g全局替换
/g修饰符可让s///进行所有可能的,不重复的替换
$_="home, sweet home!";
s/home/cave/g;
print "$_\n"; #print cave, sweet home!.
s/^\s+//; #将开头的空白字符替换成空白字符串
s/\s+$//; #将结尾的空白字符替换成空白字符串
s/^\s+|\s+$//g; #将开头和结尾的空白字符串替换成空白
-1-----------------------------------------------------------------------------------------------------------------
-3-------------------------------------------------------------------------------------
不同的界定符:
s#^https://#http://#;
s{fred}{barney};
s[fred][barney];
s<fred><barney>;
绑定操作符:
$file =~ s#^.*##;
无损替换:
my $orginal ='Fred ate 1 rib';
my $copy = $orginal;
$copy =~ s/\d+ rib/10 rib/;
大小写转换:
$_ = 'I saw Barney with Fred';
s/(Fred|Barney)/\U$1\E/gi; #BARNEY FRED
$_='Fred BARNEY';
s/(Fred|BARNEY)/\L$1\E/; #barney fred
-3-------------------------------------------------------------------------------------
-4-------------------------------------------------------------------------------------
split操作符:
它会根据字符串的模式来拆分字符串,对于制表符,冒号,空白或任意符号分隔不同的字段数据
的字符串来说,用这个操作符分解提取相当方便。
my @fields = split /separator/,$string;
my @fields = split /:/,"abc:def:g:h"; #result is qw(abc def g h);
如果两个连续的分隔符连在一起,就会产生空字段:
my @fields = split /:/,"abc:def::g:h"; #result is ('abc','def','','g','h')
也可以利用split的/\s+/模式根据空白符分隔字段,该模式把所有连续空白视作单单个空格并以
此切割。
my $some="This is a \t test.\n";
my @test = split /\s+/,$some;
默认split会以空白符分隔$_中的字符串:
my @t = split; #等效于split /\s+/,$_;
-4-------------------------------------------------------------------------------------
-5-------------------------------------------------------------------------------------
join函数
与split用法相反,join是把这些片段接合成一个字符串,join用法如下:
my $result = join $glue,@pieces;
my $x = join ":",4,6,8,10.12; #$x result is "4:6:8:10:12"
-5-------------------------------------------------------------------------------------
-6-------------------------------------------------------------------------------------
非贪婪量词:
正则表达式引擎会一直行上述的回溯动,不断以不同的方式调整模式匹配内容来适应字符串,
直到最后找到一个整体匹配成功为止,要要直到最后都找不到宣告失败。
好繁琐。。。。
非贪婪量词:
?
+? #只匹配一次
跨行的的模式匹配:
$_="I'm much better\nthan Barney is\nat bowling,\nWilma.\n";
if(/^wilma\b/im)
{
print "matched\n";
}
一次更新多个文件:
更新多个文件肯定是要备份源文件,避免操作失误可以进行还原。可以特殊变量来进行备份文件:
$^I
#!/usr/bin/perl
use strict;
chomp(my $date=`date`);
$^I='.bak';
while(<>)
{
s/test/hello/;
s/phone//;
print ;
}
从命令行直接编辑:
perl -p -i.bak -w -e 's/test/laomeng/g' test*.data
-6-------------------------------------------------------------------------------------
正则表达式--处理文本
最新推荐文章于 2024-01-06 17:34:59 发布