正則表示式--處理文字
阿新 • • 發佈:2019-02-01
-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-------------------------------------------------------------------------------------