Причина, по которой HTML-код не анализируется с помощью регулярных выражений, - , если вы не можете гарантировать формат .Если вы уже знаете формат строки, вам не нужно беспокоиться о наличии полного анализатора.
В вашем случае, если вы знаете, что это формат, вы можете использовать str_replace
str_replace('<p><span class="headline">', '<p class="headline"><span>', $data);