1

通常,当我检查正则表达式是否成功时,我会这样做

if ($var =~ /aaa(\d+)bbb(\d+)/) { # $1 and $2 should be defined now }

但我记得看到这种变体的接缝更短。也许它只有一个缓冲区。

$1在成功的正则表达式之后,任何人都可以思考或其他方法来测试吗?

4

4 回答 4

10

您可以完全避免 1 美元和类似的费用:

if (my ($anum, $bnum) = $var =~ /aaa(\d+)bbb(\d+)/) {
    # Work with $anum and $bnum
}
于 2013-07-24T08:39:45.077 回答
1

我能想到的唯一更短的方法是匹配是否在 $_ 上。例如:

for (@strings) {
   if (m/aaa(\d+)bbb(\d+)/) {
...

如果匹配成功,则将填充 $1 和 $2。

于 2013-07-24T08:14:18.117 回答
1

永远不要忘记

use strict;
use warnings;

我喜欢 Perl 中的简单语法,但不是这样:

my $str = 'abc101abc';

$str =~ m/(\d+)/ and do {print $1;}

或者

$str =~ m/(\d+)/ and print $1;

或者

($str in $_, so $_ = $str;)

m/(\d+)/ and print $1;

但!TIMTOWTDI帮助您梦想自己的风格:)

我更喜欢老式风格。

于 2013-07-24T08:25:39.467 回答
0

阅读这两个答案,我现在记得这是我所看到的

my $str = 'abc101abc';

$str =~ m/(\d+)/;
print $1 if $1;

print $1 if $str =~ m/(\d+)/;
于 2013-07-24T10:32:39.053 回答