Question

D'accord, voici ce que je suis en train de faire: Je suis en train d'utiliser PHP pour développer ce qui est essentiellement un petit sous-ensemble d'une mise en œuvre de démarquage, pas la peine d'utiliser une classe complète de démarquage

Je dois essentiellement faire un str_replace, mais alterner la chaîne de remplacement pour chaque occurrence de l'aiguille, de manière à gérer les balises HTML d'ouverture et de fermeture.

Par exemple, en italique sont une paire d'astérisques comme * ce *, et les blocs de code sont entourés par des accents graves comme `this`.

Je souhaite remplacer la première occurrence d'une paire de caractères avec la balise HTML d'ouverture correspondante, et la seconde avec la balise de fermeture.

Toutes les idées sur la façon de le faire? Je me suis une sorte d'expression régulière serait impliquée ...

Était-ce utile?

La solution

Personnellement, je boucle à travers chaque occurrence de ou * avec un compteur \, et remplacer le caractère avec la balise HTML appropriée en fonction du nombre (par exemple, si le compte est encore et vous frappez un astérisque, remplacez-le par <em>, si elle est étrange remplacer ensuite avec </em>, etc).

Mais si vous êtes sûr que vous avez seulement besoin de soutenir un couple types simples de balisage, puis une expression régulière pour chaque pourrait être la solution la plus simple. Quelque chose comme cela pour astérisques, par exemple (non testé):

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

Et quelque chose de similaire pour antislashs.

Autres conseils

Qu'est-ce que vous cherchez est plus souvent traitée par une machine d'état ou lexer / parser.

Ceci est laid, mais cela fonctionne. Catch:. Que pour un seul type de motif à la fois

$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>";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top