regexp для этого не совсем подходит есть соответствующие библиотеки для каждого языка.
Правельно было бы пользовать именно их
<div\s+class=["']fw-bold["']\s*>\s*(Финансовая отчетность)(?:\s+.*)?<\/div>
— ищет тег с классом "fw-bold", допускает наличие пробелов и кавычек.
\s* — допускает пробелы перед содержимым.
(Финансовая отчетность) — захватывает нужную часть текста.
(?:\s+.*)? — необязательная не захватывающая группа, которая включает все, что идет после нужной части, например, "за 2024 год".
<\/div> — закрывающий тег .
<?php
$html = '
<div class="fw-bold">Финансовая отчетность за 2024 год</div>
';
$pattern = '/(<div\s+class=["\']fw-bold["\']\s*>)(.*?Финансовая отчетность)(?:\s+.*)?(<\/div>)/i';
// Замена: оставляем только начало, нужный текст и закрывающий тег
$replacement = '$1$2$3';
$result = preg_replace($pattern, $replacement, $html);
echo $result;
?>