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'
]
];
Обратите внимание, что я изменил ваше регулярное выражение, но похоже, что это то, что вы собираетесь судить по вашимкомментарии ...