Вы можете использовать опцию Perl "/s
", которая сообщает, что ".
" соответствует всем символам , включая новых строк (вместо этого обрабатывайте строку как одну гигантскую строку за линию). Вы ограничиваете совпадение первой таблицей, используя квантификатор ?
, чтобы сделать *
нежадным:
$contents =~ s/^.*?<table/$newHeader/s
Кроме того, просто помните, что при замене также будет удален текст "<table
", поэтому вам нужно будет убедиться, что он каким-то образом вставлен обратно, возможно, с помощью:
$contents =~ s/^.*?<table/<table$newHeader/s
Или вы можете использовать положительное упреждающее утверждение нулевой ширины, которое говорит, что «после совпадения это выражение также должно совпадать», но текст в проверочном утверждении не считается частью совпадения (и, следовательно, не будет подлежит замене):
$contents =~ s/^.*?(?=<table)/$newHeader/s
И это оставит "<table
" без изменений.