Ваш вопрос кажется немного запутанным.Требования не очень ясны, несмотря на то, что вы указали «фактическую строку» и «ожидаемый результат».
Этот код должен обеспечить что-то очень близкое к тому, что вы хотите:
#!/usr/bin/perl
use strict;
use warnings;
open FILE, "<", "test.html" or die $!;
while (my $fileline = <FILE>) {
while ($fileline =~ m/test_example_start(.*?)text_example_end(.*?)((?=test_example_start)|($))/gi) {
print "first_part$1middle_part$1last_part$2";
}
print "\n";
}
close FILE;
Предполагая, что содержимое файла test.html
следующее:
test_example_start это урок-1 text_example_end, где все посещали класс test_example_start, это урок-2 text_example_end, где два члена посещали класс test_example_start thisэто урок-3 text_example_end, в котором пять участников посетили класс
, тогда вышеприведенный сценарий будет иметь следующий вид:
first_part это урок-1 middle_part это урок-1last_part, где все учились в классе first_part, это урок-2 middle_part, это урок-2 last_part, где два участника посещали урок first_part, это урок-3 middle_part, это урок-3 last_part, где пять участников посещали урок
Я не уверен, что это то, что тынет, потому что я не знаю, что именно вы хотите вставить во вновь созданный middle_part
Помимо исправления в вашем регулярном выражении и очистки кода, ключевой момент здесь заключается в том, что если выЕсли вы хотите заменить все вхождения строки, тогда вы должны поместить тест строки внутри блока while
, а не if
.