Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 9 Diciembre 2019, 00:31 am



Título: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: Leguim en 9 Diciembre 2019, 00:31 am
Buenas noches,

¿Como puedo hacer que si en una cadena hay 4 o más (>= 4) lineas en blanco "\n" seguidas estas se transformen en 3 con php

sería algo así:

"Hola,




Acá de nuevo, arriba hay 4 lineas en blanco"


"Hola de nuevo,








Acá de nuevo, arriba hay 8 lineas en blanco"

el programa debería transformarlo en esto =>
"Hola de nuevo,



Arriba hay ahora 3 lineas en blanco"


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: engel lex en 9 Diciembre 2019, 00:57 am
puedes usar regex para reemplazar

Código
  1. echo preg_replace($patrón, $sustitución, $cadena);

con patron "/\s{4,}/m"

sería algo como

Código
  1. <?php
  2. $texto = "       ";
  3. $salida = preg_replace("/\ {4,}/m", "   \n", $texto);
  4. echo $salida;
  5. echo "hola"; // para ver si el salto de linea fue efectivo o no


eso haría todos los reemplazos necesarios directamente


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: Leguim en 9 Diciembre 2019, 01:34 am
No funciono creo que algo estoy poniendo mal porque los saltos de lineas se mantienen

"Texto







Texto" <= (7) saltos de lineas seguidos que están vacíos.

"Texto



Texto" <= Transforma en (3) saltos de lineas seguidos.


Código
  1. <?php
  2. $string = '• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';
  3.  
  4. echo nl2br($string);
  5. ?>
  6. <br><br><br><br>
  7. <?php
  8. $salida = preg_replace('/\ {4,}/m', "\n", $string);
  9. echo nl2br($salida);
  10. ?>
  11.  

Los saltos de lineas se mantienen ¿qué estoy haciendo mal?


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: engel lex en 9 Diciembre 2019, 02:02 am
error mio, entendi espacios en blanco "\ {4,}" ahi dice "cuatro o mas espacios en blanco" era "\n{4,}" que es "4 o mas saltos de linea"

y el reemplazo tambien lo fallé cambiaba 4 o mas espacios por un salto de linea, tu quieres 4 o mas saltos de linea por solo 3

claramente como los trato como \n no hará efecto sobre los \r, así que te recomendaría eliminar los \r (con un reemplazo a vacio "") pero queda de tu parte y necesidad


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: Leguim en 9 Diciembre 2019, 02:33 am
error mio, entendi espacios en blanco "\ {4,}" ahi dice "cuatro o mas espacios en blanco" era "\n{4,}" que es "4 o mas saltos de linea"

y el reemplazo tambien lo fallé cambiaba 4 o mas espacios por un salto de linea, tu quieres 4 o mas saltos de linea por solo 3

claramente como los trato como \n no hará efecto sobre los \r, así que te recomendaría eliminar los \r (con un reemplazo a vacio "") pero queda de tu parte y necesidad

Hice así pero no creo que tampoco me este funcionando bien,

Código
  1. <?php
  2. $string = '• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';
  3.  
  4. echo nl2br($string);
  5. ?>
  6. <br><br><br><br>
  7. <?php
  8. $salida = str_replace("\n\n\n\n", "\n\n\n", $string); // además viendo no va a estar siguiendo un patrón de que si son más de 4, va a funcionar solamente si son 4
  9. echo nl2br($salida);
  10. ?>
  11.  


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: engel lex en 9 Diciembre 2019, 04:00 am
Código
  1. $texto = '• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';
  2. echo "----$texto---\n";
  3. $salida = preg_replace("/\n{4,}/m", "\n\n\n", $texto);
  4. echo "\n++++++++++++++\n----$salida---\n";

resultado

Código:
----• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.








• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.---

++++++++++++++
----• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.


• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.
• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.---

le coloqué un monon de guines y simbolos de suma para que fuera mas visible


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: Leguim en 9 Diciembre 2019, 04:10 am
¡Funciona perfecto! Yo para las expresiones regulares soy medio duro de entender, muchas gracias, otra vez!  ;-) ;-) ;-) ;-)


Título: Re: [Pregunta]: ¿Como puedo hacer que si son 4 espacios seguidos...?
Publicado por: engel lex en 9 Diciembre 2019, 04:16 am
¡Funciona perfecto! Yo para las expresiones regulares soy medio duro de entender, muchas gracias, otra vez!  ;-) ;-) ;-) ;-)

sinceramente las regex son algo de internalizar XD muchas veces es mas fácil explicar cosas de física cuántica que el regex XD