一对一匹配或在一个正则表达式行中全部匹配(Perl)

时间:2019-12-18 01:02:38

标签: regex perl

我有一个解析电子邮件正文内容并提取其中几个单词的任务。 我如何提取这些单词并不是很重要,但是我很好奇下面两个选项中哪个更快或更建议。

1. $email =~ /(date) (time) (some other pattern)/;
   my $date = $1;
   my $time = $2;
   my $other_pattern = $3;

2. $email =~ /(date)/;
   my $date = $1;
   $email =~ /(time)/;
   my $time = $1
   $email =~ /(some other pattern)/;
   my $other_pattern = $1;

其中1个正则表达式行中都匹配的数字1或我一一匹配的2号数字?以及为什么。

1 个答案:

答案 0 :(得分:1)

在大多数情况下,首选使用在一个正则表达式中使用三种模式的第一种方法。这是因为它更加熟悉,因此易于维护。日期和时间似乎特别自然地成为一个正则表达式。
请记住添加x标志以提高可读性。
考虑使用Regexp::Common::timehttps://metacpan.org/pod/Regexp::Common::time
直接捕获到变量中,而不是$1等,以提高速度和可读性:

my ($date, $time, $other) = $email =~ m{...}x;