在<span>标记中将</h3><p>后的第一个字符换行

时间:2016-11-05 作者:Cedon

这是我之前提出的一个问题的延续,这个问题是关于如何使用the_excerpt().

我要做的是从the_content() 按当前状态获取以下输出:

<h3>Heading</h3>
<p>Paragraph</p>
并让其执行以下操作:

<h3>Heading</h3>
<p><span class="dropcap">P</span>aragraph</p>
我成功地完成了此操作,输出来自the_excerpt() 使用以下各项:

$the_excerpt = preg_replace(\'/^(.)/\', \'<span class="dropcap">\\1</span>\', $the_excerpt);
它工作得非常完美,因此我借用了这行代码并将其修改为:

$the_content = preg_replace( 
      \'/(?<=\\<\\/h3\\>\\n<p>)./\',
      \'<span class="dropcap">\\1</span>\',
      $the_content
 );
此筛选器运行时,将产生以下输出:

<h3>Heading</h3>
<p><span class="dropcap"></span>aragraph</p>
但如果我改变\'<span class="dropcap">\\1</span>\' 到一个静态字符或字符串,如“@”,则它可以工作。

我需要将替换字符串更改为什么?在我看来很奇怪the_excerpt() 但不是为了the_content().

2 个回复
最合适的回答,由SO网友:jgraup 整理而成

主要问题是你有positive lookbehind 但是没有capture group 所以\\1$1 不是可用的变量。

修复您的regex 要提供捕获组,请执行以下操作:\'/(?<=\\<\\/h3\\>\\n<p>)(.)/\' 然后引用为$1.

ob_start();?>
    <h3>Heading</h3>
    <p>Paragraph</p>
    <p>Paragraph2</p>
<?php

$search = ob_get_clean();    

$result = preg_replace( 
        \'/(?<=\\<\\/h3\\>\\n<p>)(.)/\', 
        \'<span class="dropcap">$1</span>\', $search );

SO网友:Florian

如果这是用于CSS样式,则不需要使用正则表达式。具有h3 + p:first-letter 您应该能够为<p> a之后<h3>.