通过“编程Perl的工作一个PHP程序员新的Perl,我所遇到的以下的正则表达式:Perl的正则表达式的问题
/^(.*?): (.*)$/;
此正则表达式的目的是分析电子邮件标头并将其插入到哈希。电子邮件头包含在一个单独的.txt文件,并在以下格式:
From: [email protected]
To: [email protected]
Date: Mon, 1st Jan 2000 09:00:00 -1000
Subject: Subject here
我使用这个例子正则表达式的工作,整个代码如下:
use warnings;
use strict;
my %fields =();
open(FILE, 'header.txt') or die('Could not open.');
while(<FILE>)
{
/^(.*?): (.*)$/;
$fields{$1} = $2;
}
foreach(%fields)
{
print;
print "\n";
}
现在,在我的问题上。我不确定为什么第一个子模式被修改为使用最小量词。这可能是一个小问题,但我不明白为什么它已经完成。
感谢您的回复。
请注意,作为一个侧面的问题,这里看到的邮件处理不处理邮件标题的延续线。以下是合法和共同的标题行:“主题:这是\ n \ tmultiline主题行\ n”。也请接受你最喜欢的答案。 – 2011-05-19 20:03:40
请注意,最小量词可以用适用于适当受限字符类的普通(贪婪)量词替换。在这种情况下,请考虑/ ^([^:] *):(。*)$ /,其中第一组捕获尽可能多的非冒号字符。 – Narveson 2011-05-19 20:34:51
只是一个侧面说明,尽管是一个经典的编程Perl,但它显示了它的年代,并且不包括当前关于风格方面的最佳实践的想法。看看Modern Perl,有效的Perl编程或者Perl最佳实践来获取这些信息。较新版本的Llama(Learning Perl)也具有这些风格差异。 PS,不要浪费时间学习伪哈希,他们已经从语言中删除了。 – daotoad 2011-05-20 05:00:55