2011-09-21 72 views
1

我是perl的新手,編寫我的第幾個程序並使用它的模式匹配功能。我讀入文件到陣列是這樣的:在perl模式匹配..如何從模式中排除 n字符

@list=<file> 

然後通過$列表[0..9]等,並且當我匹配一個圖案,所述$list[0]包括\n字符,因此索引陣列的每一行比賽失敗。因此,如果($string =~ $list[0])雖然沒有\n字符,但它會匹配。

如何告訴模式匹配器不考慮模式中的\n字符?

感謝

+0

一個典型的正則表達式將不考慮默認的換行符。例如,'/ foo /'或甚至'/^foo $ /'。告訴我們你的正則表達式。否則,我們可以給出的唯一建議是(1)從字符串中刪除換行符,或者(2)向正則表達式添加換行符。 – FMc

回答

4

可以刮鬍子行讀取後,從數組結束:

@lines = …; 
chomp @lines; 

現在@lines包含線而沒有行結束。有關詳細信息,請參見perldoc chomp

1

如果你想刪除您行你可以在\n

chomp $list[0] 

看到perldoc -f chomp的細節。

0

這將匹配與\n

if ($list[0] =~ "$string\n") 

或者,如果你想成\ n是可選:

if ($list[0] =~ /$string\n?/) 
1

這是一個很好的機會去了解Perl如何模塊的工作。

例如,您可以使用Perl6::Slurp這將既a)解析文件b)將內容放入數組c)爲您刪除換行符。

例如:

use Perl6::Slurp; 
my @lines = slurp '<:utf8', 'filename', {chomp=>"\n"}