A123
将在捕获组中$1
并将123
在组中$2
所以你可以说:
if ( /^(A(\d+))|(B(\d+))|(C(\d+))$/ && $1 eq 'A123' && $2 eq '123' ) {
...
}
这是多余的,但你明白了......
编辑:不,您不必枚举每个子匹配,您询问如何知道是否A123
匹配以及如何提取123
:
- 除非匹配,否则您不会进入
if
区块A123
- 您可以
123
使用$2
反向引用进行提取。
所以也许这个例子会更清楚:
if ( /^(A(\d+))|(B(\d+))|(C(\d+))$/ ) {
# do something with $2, which will be '123' assuming $_ matches /^A123/
}
编辑2:
要在 AoA 中捕获匹配项(这是一个不同的问题,但应该这样做):
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @matches = map { [$1,$2] if /^(?:(A|B|C)(\d+))$/ } <DATA>;
print Dumper \@matches;
__DATA__
A123
B456
C769
结果:
$VAR1 = [
[
'A',
'123'
],
[
'B',
'456'
],
[
'C',
'769'
]
];
请注意,我修改了您的正则表达式,但从您的评论来看,这似乎就是您想要的...