修改 preg_replace 为第一个字母和第一个单词添加跨度

Modify preg_replace to add span to both first letter and first word

我正在使用以下 preg_replace 代码在段落的第一个字母周围添加一个标记(在 Wordpress 中):

<?php
    ob_start();
    the_content();
    $content = ob_get_clean();
    $content = preg_replace('@<p>\s*((?:<[^<>]+>\s*)*)([^<>\s])@', '<p><span class="pst-Dropcap"></span>', $content, 1);

    echo $content;
?>

结果类似于:

<p><span class="pst-Dropcap">H</span>ello world.</p>

我想扩展这段代码,以便它用不同的标签跨越单词的其余部分:

<p><span class="pst-Dropcap">H</span><span class="pst-First_Word">ello</span> world.</p>

如何实现?

我知道 CSS 伪选择器 ::first-letter,在这种情况下我有不同的原因不使用它。

试试这个:

$content = preg_replace('@<p>\s*((?:<[^<>]+>\s*)*)([^<>\s])([^<>\s]*)@', '<p><span class="pst-Dropcap"></span><span class="pst-First_Word"></span>', $content, 1);