通常当我检查正则表达式是否成功时,我
if ($var =~ /aaa(\d+)bbb(\d+)/) { # $1 and $2 should be defined now }
但我记得看到这种变化更短。也许只有一个缓冲区。
在成功使用正则表达式后,是否有人可以考虑或以其他方式测试$1
?
答案 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+)/;