Foros del Web » Programando para Internet » PHP »

Expresiones regulares. Taaaaaan simple.

Estas en el tema de Expresiones regulares. Taaaaaan simple. en el foro de PHP en Foros del Web. Hola amigos, siento molestar para una tontería como esta, pero es que soy incapaz. No se si es que algo falla o si entre los ...
  #1 (permalink)  
Antiguo 01/12/2007, 07:20
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Expresiones regulares. Taaaaaan simple.

Hola amigos, siento molestar para una tontería como esta, pero es que soy incapaz.

No se si es que algo falla o si entre los 20 manuales que he visto ya no han conseguido nada conmigo.

Tengo algo tan simple como esto:

<?php
$str="Cara a Cara";
echo "Cadena: ".$str."<br><br>";

echo "Cadena2: ".ereg_replace ( "^a$" , "?" , $str );
?>


y no me quita la "a" del centro. No sé si hará falta una versión concreta de PHP, la mía es la 5.2.0 y lo único que veo es que en la configuración dice: Posix $Revision: 1.70.2.3.2.6 $ o si estoy haciendo algo mal, pero he probado todas las combinaciones posibles para esta chorrada.

Otras sentencias si me funcionan, por si sirve de algo.

Alguien me dice si hago algo mal? He probado con paréntesis, corchetes fuera y dentro y las barras "/", que por cierto no sé para que sirven y no lo he encontrado.

Una ayudita please. Gracias.
  #2 (permalink)  
Antiguo 01/12/2007, 07:26
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Expresiones regulares. Taaaaaan simple.

¿Qué quieres hacer exactamente? ¿Quitar todas las "a" o sólo la del centro?

Sí es la del centro es algo más complejo, habría que evaluar el tipo de cadena que puede ser, para adaptarse a las condiciones. Si fuesen todas las " a " (espacio "a" espacio), sería más sencillo.

Sí son todas las "a" es tan fácil como esto:

Código PHP:
 $str="Cara a Cara";
 echo 
"Cadena: ".$str."<br><br>";
 
 echo 
"Cadena2: ".ereg_replace "a" "?" $str ); 

Pero creo que no es lo que quieres.... especifica un poco más.
  #3 (permalink)  
Antiguo 01/12/2007, 07:43
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Expresiones regulares. Taaaaaan simple.

Gracias por responder.

A ver, en realidad tengo una lista de palabras que tengo que sustituir en un texto. Las quiero buscar mediante expresiones regulares, concretamente estaba utilizando la función preg_replace() para reemplazarlas por un campo de formulario. ($texto = preg_replace($palabra, "<input>", $texto, 1);).

Mi problema empieza porque si pongo como expresión regular tan sólo la palabra que quiero quitar por ejemplo "idioma", también me haría la sustitución en la palabra "idiomaS" o "idiomaBoletin"... por lo que esas sustituciones quedan como: <input>S o <input>Boletin.

Así, intenté usar "( $palabra )" (con espacios entre medias), pero claro, entonces falla cuando esa palabra es la primera del texto, la última, o si va seguida/precedida de cualquier signo de puntuación.

Así que el paso siguiente era este:
$texto = preg_replace("^palabra$", $etiqueta, $texto, 1);

pero no me hace ni caso. Alguna idea? Gracias otra vez.
No sé si me explico.
  #4 (permalink)  
Antiguo 01/12/2007, 11:31
Avatar de DarkXNightmare  
Fecha de Ingreso: agosto-2005
Ubicación: Somewhere Over The Rainbo
Mensajes: 181
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: Expresiones regulares. Taaaaaan simple.

Es muy simple...
¿Quieres quitar todas la 'a'? Mira

Estas diciendo esto...
Estas buscando una cadena completa que empieza (^) donde la cadena es "a" y que termina inmediatamente ($).

Reemplaza con esto:

ereg_replace("a", "perro", "abcd abcd");

Atentamente, DarkXNightmare :P.
__________________
Cambiando mi Web... sean pacientes :P
  #5 (permalink)  
Antiguo 02/12/2007, 03:44
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Expresiones regulares. Taaaaaan simple.

No, eso no me vale.

Lo que necesito es quitar EXACTAMENTE UNA PALABRA, es decir, necesito "^palabra$" , creo, pero no me funciona.

¿Más ideas de porqué puede ser?,
gracias.
  #6 (permalink)  
Antiguo 02/12/2007, 07:20
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Expresiones regulares. Taaaaaan simple.

No, no necesitas eso. Y no es tan simple!

Con eso le dirías que la palabra tiene que estar en el inicio y en el fin de la cadena, es decir que la cadena sólo contenga esa palabra.

Lo que necesitas sería buscar una cadena que:

- Antes de la palabra tenga: un espacio en blanco o bien una serie de caracteres definidos por ti (punto, coma, guiones y lo que quieras). O que la palabra esté en el inicio de la cadena.

- Después de la palabra tenga: un espacio en blanco o bien una serie de caracteres definidos por ti (punto, coma, guiones y lo que quieras). O que la palabra esté en el final de la cadena.

Es importante que tanto antes como después de la palabra sólo tiene que cumplir UNA de las condiciones, es decir un OR.

Esto es la teoria, en la práctica se podría hacer (supongo) pero tengo algo oxidadas las expresiones regulares, pero bueno, es un comienzo para que vayas mirando o te vayan ayudando.

Siento no poder decirte mucho más, pero no ando con tiempo para ponerme a mirarlo.

Mira algún manual de expresiones regulares, o algún script que las utilice. Habrá formas medianamente sencillas de hacerlo (las expresiones regulares tienen bastantes variables que simplifican las cosas).

Y siempre te queda la opción menos elegante y más chapucera de hacerlo a mano trabajando con las funciones de cadenas de PHP....

Suerte y un saludo!
  #7 (permalink)  
Antiguo 03/12/2007, 07:23
 
Fecha de Ingreso: diciembre-2003
Mensajes: 49
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Expresiones regulares. Taaaaaan simple.

Aaaah! creo que lo he captado,

No vale para subcadenas sino para cadenas enteras no?

Bueno, pues investigaré un poco a ver que puedo hacer. Lo de las funciones de cadena ya lo he intentado, pero me complica todo mucho por la forma en la que selecciono las palabras.

Igualmente, muchas gracias por la ayuda, ya os contaré que salió. Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:26.