正则表达式后测试$ 1的不同方法?

时间:2013-07-24 08:11:32

标签: regex perl

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

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

但我记得看到这种变化更短。也许只有一个缓冲区。

在成功使用正则表达式后,是否有人可以考虑或以其他方式测试$1

4 个答案:

答案 0 :(得分:10)

你可以完全避免1美元和类似的事情:

if (my ($anum, $bnum) = $var =~ /aaa(\d+)bbb(\d+)/) {
    # Work with $anum and $bnum
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

永远不要忘记

use strict;
use warnings;

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

my $str = 'abc101abc';

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

OR

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

OR

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

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

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

我更喜欢old-if style。

答案 3 :(得分:0)

阅读这两个答案,我现在回想起这就是我所看到的

my $str = 'abc101abc';

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

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