Я хочу использовать регулярное выражение Perl для извлечения определенных значений из имен файлов. Они имеют следующие (действительные) имена:Извлечение определенных значений из регулярного выражения Perl
testImrrFoo_Bar001_off
testImrrFooBar_bar000_m030
testImrrFooBar_bar231_p030
Из сказанного выше я хотел бы извлечь первые 3 цифры (всегда гарантированно будут 3), а последнюю часть строки, после последнего _
(который либо off
, либо (m
или p
), а затем 3 цифры). Итак, первое, что я хотел бы извлечь, - это 3 цифры, вторая - строка.
И я вышел со следующим способом (я понимаю, что это может быть не самым оптимальным/самым хорошими один):
my $marker = '^testImrr[a-zA-z_]+\d{3}_(off|(m|p)\d{3})$';
if ($str =~ m/$marker/)
{
print "1=$1 2=$2";
}
Где только $1
имеет действительный результат (а именно последний бит информации я хочу), но $2
получается пустой. Любые идеи о том, как получить эти 3 цифры в середине?
Чёрт! Так близко. Клянусь, после X лет много практики я получу эти кровавые регулярные выражения ...! –
@ titus.andronicus, вы можете перейти на https://regex101.com/, чтобы проверить свои регулярные выражения, он также дает вам то, что находится внутри ваших групп захвата, действительно полезно помочь отладке регулярных выражений;) –