2011-09-21 44 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"}