Perl正則表達式處理換行

use strict; 
my $values ;
open(OUTFILE,"file.txt") or die("Can't find file.txt:$!") ;
while(defined($values= <OUTFILE>)){
# print $values ;
if($values =~ /.*User Name:(.*);(.*)/ms){
print $1;
print $2;
}}

我的file.txt內容爲:
Logon Failure:
User Name:lixin;
Domain:BEIM-SERVER;
Reason:Unknown user name or bad password!
問題:按照我的程序匹配之後,本應$1得到的是lixin,$2得到的是後面所有的內容。

但此時$2只得到個換行,後面兩行內容並未得到。

這是因爲$values= <OUTFILE>只讀取了一行,$/ 中保存這輸入行記錄分隔符(它的默認分隔符是/n)。因此,每當菱形運算符用於讀取數據時,它將一直讀取數據,直到它發現與$/一致的字符。所以,如果我們將$/設爲 undef ,菱形運算符將讀取整個文件並將它們存儲在標量中。

要想讓perl“吞吃文件”,可以改成這樣:

use strict;
my $values ;
open(OUTFILE,"file.txt") or die("Can't find file.txt:$!") ;
$/ = undef; # 此行注掉後,$values 僅讀入Logon Failure:
while(defined($values= <OUTFILE>)){
# print $values ;
if($values =~ /.*User Name:(.*);(.*)/ms){
print $1;
print $2;
}}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章