Есть несколько способов сделать это с меньшим количеством кода.
Допустим, у вас есть файл с именем lines.txt:
regexlineabcdefend
regexlineghijkend
regexlinelmnopend
regexlineqrstuend
This line does not match
Neither does this
regexlinevwxyzend
, и вы хотите извлечь фрагменты, соответствующие вашемурегулярное выражение, то есть фрагменты линии между "регулярным выражением" и "концом".Простой сценарий Perl:
while (<STDIN>) {
print "$1\n" if $_ =~ /regexline(.+?)end/
}
При таком запуске
$ perl match.pl < lines.txt
вы получаете
abcdef
ghijk
lmnop
qrstu
vwxyz
Вы можете даже сделать все это из командной строки!
$ perl -nle 'напечатать $ 1, если $ _ = ~ /regexline(.+?)end/'
Что касается вашего второго вопросаЯ не уверен, что является специальным названием Perl для этого трюка.