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.