Frage

Okay, hier ist, was ich versuche zu tun: Ich versuche, PHP zu verwenden, zu entwickeln, was ist im Wesentlichen eines winzige Untergruppe einer Abschlag Implementierung nicht wert eine vollständige Abschlag Klasse mit

Ich brauche tun im Wesentlichen einen str_replace, aber die Zeichenfolge für jedes Auftreten der Nadel ersetzen abwechseln, um das Öffnen und Schließen HTML-Tags zu bearbeiten.

Zum Beispiel Kursivschrift ist ein Paar von Sternchen wie * dieser * und Code-Blöcke werden von Backticks wie `this` umgeben ist.

ich brauche das erste Auftreten eines Paares der Zeichen mit der Öffnung HTML-Tag entspricht, und der zweite mit dem schließenden Tag zu ersetzen.

Alle Ideen, wie dies zu tun? Ich dachte, eine Art von regulärem Ausdruck beteiligt sein würde ...

War es hilfreich?

Lösung

Ich persönlich würde eine Schleife durch jedes Auftreten * oder \ mit einem Zähler, und das Zeichen mit dem entsprechenden HTML-Tag ersetzen auf der Zählung basiert (zum Beispiel, wenn die Zählung selbst ist und Sie ein Sternchen treffen, austauschen mit <em>, wenn sie es seltsam ist, dann ersetzen mit </em>, etc).

Aber wenn Sie sicher sind, dass Sie nur ein paar einfache Arten von Markup unterstützen müssen, dann ein regulärer Ausdruck für jede vielleicht die einfachste Lösung sein. So etwas wie dies für Sternchen, beispielsweise (nicht getestet):

preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);

Und etwas ähnliches für Schrägstriche.

Andere Tipps

Was Sie suchen wird häufiger durch eine Zustandsmaschine oder Lexer / Parser behandelt.

Das ist hässlich, aber es funktioniert. Fangen. Nur für eine Mustertyp zu einem Zeitpunkt

$input = "Here's some \\italic\\ text and even \\some more\\ wheee";

$output = preg_replace_callback( "/\\\/", 'replacer', $input );

echo $output;

function replacer( $matches )
{
    static $toggle = 0;
    if ( $toggle )
    {
        $toggle = 0;
        return "</em>";
    }
    $toggle = 1;
    return "<em>";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top