w3school regulares preg_replace_callback preg_replace preg_match online expresiones especiales caracteres php regex preg-replace

php - regulares - preg_replace_callback



Reemplazar varias lĂ­neas nuevas, tabulador, espacio (10)

use / R (que representa cualquier secuencia de final de línea):

$str = preg_replace(''#/R+#'', ''</p><p>'', $str);

encontrado aquí: http://forums.phpfreaks.com/topic/169162-solved-replacing-two-new-lines-with-paragraph-tags/

Documentación de PHP sobre secuencias de escape :

/ R (salto de línea: coincide con / n, / r y / r / n)

Quiero reemplazar varios caracteres de nueva línea con un carácter de nueva línea, varios espacios con un solo espacio.
Intenté preg_replace("//n/n+/", "/n", $text); y falló!

También hago este trabajo en el $ text para formatear.

$text = wordwrap($text,120, ''<br/>'', true); $text = nl2br($text);

$ text es un texto grande tomado del usuario para BLOG, y para un mejor formato, uso wordwrap.


¡Reemplace la cabeza y el final de la cadena o documento!

preg_replace(''/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/'','''',$match);


En teoría, Regular Express funciona, pero el problema es que no todos los sistemas operativos y navegadores envían solo / n al final de la cadena. Muchos también enviarán un / r.

Tratar:

Edición: He simplificado este:

preg_replace("/(/r?/n){2,}/", "/n/n", $text);

Edit: Y para solucionar el problema de algunos envios / r solo:

preg_replace("/[/r/n]{2,}/", "/n/n", $text);

Actualización 1: Basado en su actualización:

// Replace multiple (one ore more) line breaks with a single one. $text = preg_replace("/[/r/n]+/", "/n", $text); $text = wordwrap($text,120, ''<br/>'', true); $text = nl2br($text);


Esta es la respuesta, ya que entiendo la pregunta:

// normalize newlines preg_replace(''/(/r/n|/r|/n)+/'', "/n", $text); // replace whitespace characters with a single space preg_replace(''//s+/'', '' '', $text);

Editar

Esta es la función real que utilizo para convertir nuevas líneas a elementos de salto de línea HTML y de párrafo:

/** * * @param string $string * @return string */ function nl2html($text) { return ''<p>'' . preg_replace(array(''/(/r/n/r/n|/r/r|/n/n)(/s+)?/'', ''//r/n|/r|/n/''), array(''</p><p>'', ''<br/>''), $text) . ''</p>''; }


He tratado con la función strip_tags en php, tuve algunos problemas como: después de un salto de línea aparece una nueva línea con algunos espacios y luego aparece un nuevo salto de línea continuamente ... etc. sin ninguna regla :(.

Esta es mi solución para lidiar con strip_tags

Reemplace múltiples espacios a uno, múltiples saltos de línea a un solo salto de línea

espero que esto ayude

function cleanHtml($html) { // clean code into script tags $html = preg_replace(''#<script(.*?)>(.*?)</script>#is'', '''', $html); // clean code into style tags $html = preg_replace(''/</s*style.+?</s*///s*style.*?>/si'', '''', $html ); // strip html $string = trim(strip_tags($html)); // replace multiple spaces on each line (keep linebreaks) with single space $string = preg_replace("/[[:blank:]]+/", " ", $string); // (*) // replace multiple spaces of all positions (deal with linebreaks) with single linebreak $string = preg_replace(''//s{2,}/'', "/n", $string); // (**) return $string; }

las palabras clave son (*) y (**)


Intenté todo lo anterior, pero no funcionó para mí. Entonces creé un largo camino para resolver ese problema ...

Antes de :

echo nl2br($text);

Después :

$tempData = nl2br($text); $tempData = explode("<br />",$tempData); foreach ($tempData as $val) { if(trim($val) != '''') { echo $val."<br />"; } }

Y me funcionó ... escribí aquí porque, si alguien vino aquí para encontrar una respuesta como yo.


Necesita el modificador multilínea para que coincida con varias líneas:

preg_replace("/PATTERN/m", "REPLACE", $text);

También en su ejemplo parece que está reemplazando 2+ nuevas líneas con exactamente 2, que no es lo que indica su pregunta.


Prueba esto:

preg_replace("/[/r/n]*/", "/r/n", $text);


Si solo quieres reemplazar varias pestañas con una sola pestaña, usa el siguiente código.

preg_replace("//s{2,}/", "/t", $string);


Sugeriría algo como esto:

preg_replace("/(/R){2,}/", "$1", $str);

Esto se hará cargo de todos los caracteres de nueva línea de Unicode.