Pregunta

Bueno, esto es lo que yo estoy tratando de hacer:Estoy tratando de utilizar PHP para desarrollar lo que en esencia es un pequeño subconjunto de una rebaja de la implementación, no vale la pena mediante la reducción de la clase.

Necesito esencialmente hacer un str_replace, pero la alternativa de la cadena de reemplazo para cada ocurrencia de la aguja, así como para controlar la apertura y cierre de las etiquetas HTML.

Por ejemplo, las cursivas son un par de asteriscos como *este*, y los bloques de código se encuentra rodeado por comillas simples inclinadas como `esto`.

Necesito reemplazar la primera aparición de un par de los personajes con la etiqueta HTML de apertura correspondiente, y la segunda con la etiqueta de cierre.

Cualquier idea sobre cómo hacer esto?Pensé que algún tipo de expresión regular estarían involucrados...

¿Fue útil?

Solución

En lo personal, me gustaría recorrer cada ocurrencia de * o \ con un contador, y sustituir el personaje con la etiqueta HTML correspondiente en base al recuento (por ejemplo, si el recuento es aún y golpea una asterisco, reemplazarlo con <em>, si es impar entonces sustituirlo por </em>, etc).

Sin embargo, si está seguro de que sólo se necesita para soportar un par de tipos simples de marcado, a continuación, una expresión regular para cada uno podría ser la solución más fácil. Algo como esto por asteriscos, por ejemplo (no probado):

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

Y algo similar para las barras invertidas.

Otros consejos

Lo que está buscando es más comúnmente manejada por una máquina de estados o analizador léxico / analizador.

Esto es feo, pero funciona. Catch:. Sólo para un tipo de patrón a la vez

$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>";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top