【问题标题】:Modify preg_replace to add span to both first letter and first word修改 preg_replace 以将 span 添加到第一个字母和第一个单词
【发布时间】:2018-10-05 21:31:38
【问题描述】:

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

<?php
    ob_start();
    the_content();
    $content = ob_get_clean();
    $content = preg_replace('@<p>\s*((?:<[^<>]+>\s*)*)([^<>\s])@', '<p>$1<span class="pst-Dropcap">$2</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,在这种情况下我有不同的理由不使用它。

【问题讨论】:

    标签: php regex wordpress preg-replace preg-match


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 这很有魅力,非常感谢!额外的([^&lt;&gt;\s]) 有什么作用?
    • 请注意添加到第二个 ([^\s]) 模式的 *。这 * 意味着您可以拥有该模式 0 次或多次。有关更多信息,请参阅此:php.net/manual/en/regexp.reference.meta.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多