use strict;
my $str = 'AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8';
my $regex = qr/^ # начало строки
(?:
([a-z]) | # 1 гр
([A-Z]) | # 2 гр
([0-9]) # 3 гр
)
(?(1) # если совпала 1 гр
[a-z]*+ # захватываем все символы как в 1 гр
(?:
([A-Z]) | # 4 гр
([0-9]) # 5 гр
)
(?(4) # если совпала 4 гр
[a-zA-Z]*+ # захватываем все символы как в 1 и 4 гр
[0-9]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 4 гр
(?(5) # если совпала 5 гр
[a-z0-9]*+ #захватываем все символы как в 1 и 5 гр
[A-Z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 5 гр
(?!) # роняем матчинг
) # конец если совпала 5 гр
) # конец если совпала 4 гр
) # конец если совпала 1 гр
(?(2) # если совпала 2 гр
[A-Z]*+ # захватываем все символы как в 2 гр
(?:
([a-z]) | # 6 гр
([0-9]) # 7 гр
)
(?(6) # если совпала 6 гр
[a-zA-Z]*+ # захватываем все символы как в 2 и 6 гр
[0-9]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 6 гр
(?(7) # если совпала 7 гр
[A-Z0-9]*+ #захватываем все символы как в 2 и 7 гр
[a-z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 7 гр
(?!) # роняем матчинг
) # конец если совпала 7 гр
) # конец если совпала 6 гр
) # конец если совпала 2 гр
(?(3) # если совпала 3 гр
[0-9]*+ # захватываем все символы как в 3 гр
(?:
([A-Z]) | # 8 гр
([a-z]) # 9 гр
)
(?(8) # если совпала 8 гр
[0-9A-Z]*+ # захватываем все символы как в 3 и 8 гр
[a-z]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 8 гр
(?(9) # если совпала 9 гр
[0-9a-z]*+ #захватываем все символы как в 3 и 9 гр
[A-Z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 5 гр
(?!) # роняем матчинг
) # конец если совпала 5 гр
) # конец если совпала 8 гр
) # конец если совпала 3 гр/xp;
if ( $str =~ /$regex/ ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html