webentwicklung-frage-antwort-db.com.de

Binde das erste Zeichen nach </ h3> <p> in ein <span> -Tag ein

Dies ist eine Fortsetzung einer Frage, die ich zuvor mit der Ausgabe von the_excerpt() gestellt habe.

Was ich versuche zu tun, ist die folgende Ausgabe von the_content() zu nehmen, um die folgende Ausgabe zu nehmen, wie es derzeit ist:

<h3>Heading</h3>
<p>Paragraph</p>

Und lassen Sie es das Folgende tun:

<h3>Heading</h3>
<p><span class="dropcap">P</span>aragraph</p>

Ich habe dies erfolgreich mit der Ausgabe von the_excerpt() ausgeführt und dabei Folgendes verwendet:

$the_excerpt = preg_replace('/^(.)/', '<span class="dropcap">\1</span>', $the_excerpt);

Es funktioniert perfekt, also habe ich mir diese Codezeile ausgeliehen und sie folgendermaßen modifiziert:

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

Wenn dieser Filter ausgeführt wird, wird die folgende Ausgabe ausgegeben:

<h3>Heading</h3>
<p><span class="dropcap"></span>aragraph</p>

Aber wenn ich den '<span class="dropcap">\1</span>' in ein statisches Zeichen oder eine Zeichenfolge wie '@' ändere, funktioniert es.

Auf was muss ich die Ersatzzeichenfolge ändern? Scheint mir komisch, dass es im Fall von the_excerpt() funktioniert, aber nicht für the_content().

1
Cedon

Das Hauptproblem ist nur, dass Sie einen positive lookbehind haben, aber keinen capture group, sodass \1 oder $1 keine verwendbare Variable ist.

Korrigieren Sie Ihren regulären Ausdruck , um die Erfassungsgruppe bereitzustellen: '/(?<=\<\/h3\>\n<p>)(.)/', dann referenzieren Sie als $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 );
3
jgraup

Falls dies für das Stylen mit CSS gedacht ist, müssen Sie keinen regulären Ausdruck verwenden. Mit h3 + p:first-letter sollten Sie in der Lage sein, den ersten Buchstaben eines <p> nach einem <h3> zu formatieren.

2
Florian