Foros del Web » Programando para Internet » PHP »

Analizar string

Estas en el tema de Analizar string en el foro de PHP en Foros del Web. Quiero analizar si existe la palabra cielo o estrella pero que no se encuentre la palabra gato... Código PHP: $texto  =  'Cielo estrella tierra agua sol' ;         if ( preg_match ...
  #1 (permalink)  
Antiguo 07/08/2010, 10:10
 
Fecha de Ingreso: mayo-2003
Mensajes: 544
Antigüedad: 20 años, 10 meses
Puntos: 1
Analizar string

Quiero analizar si existe la palabra cielo o estrella pero que no se encuentre la palabra gato...

Código PHP:
$texto 'Cielo estrella tierra agua sol';

        if (
preg_match("/(cielo|estrella)^gato/"$texto))
            echo 
"true";
        else
            echo 
"false"
Me tira false cuando me tendría que dar true

Qué estoy haciendo mal?
__________________
CSSBoulevar
Recursos para diseñadores y programadores webs
  #2 (permalink)  
Antiguo 07/08/2010, 10:16
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Analizar string

el ^ es para decir que el grupo que pusiste del patron es el comienzo si kieres que sea negacion debe de ir entre [] segun tengo entendido suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 07/08/2010, 10:27
 
Fecha de Ingreso: mayo-2003
Mensajes: 544
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: Analizar string

Código PHP:
$texto 'Cielo Estrella tierra agua sol';

        if (
preg_match("/(cielo|estrella)[^(gato)]/"$texto))
            echo 
"true";
        else
            echo 
"false"
Me funcionó perfecto! muchas gracias!
__________________
CSSBoulevar
Recursos para diseñadores y programadores webs
  #4 (permalink)  
Antiguo 07/08/2010, 10:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Analizar string

error...

[^(gato)] no niega la frase completa, ya que al estar dentro de corchetes entonces niega cada carácter del conjunto....

así, actualmente capturaría todo lo que contenga gato como componentes de la frase: toga, gota, atgo, etc...

para negar una frase a la derecha se usa (?!)
Cita:
(?!gato)
por favor, hay que leer alguna referencia:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/08/2010, 10:52
 
Fecha de Ingreso: mayo-2003
Mensajes: 544
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: Analizar string

Muchas gracias pateketrueke!

Te hago otra pregunta, si quisiera buscar una palabra compuesta, por ejemplo "agua sol", cómo lo podría hacer? si o si tengo que hacer algo como (agua)(sol)?

Muchas gracias!
__________________
CSSBoulevar
Recursos para diseñadores y programadores webs
  #6 (permalink)  
Antiguo 07/08/2010, 11:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Analizar string

se emplea literalmente:
Cita:
/agua sol/
por eso te pido de favor que leas una referencia....

ahí viene claro el uso de paréntesis, cosas que no son obligatorios a menos que sepas lo que hacen, etc, etc...

(agua)(sol) sería el equivalente a aguasol con la diferencia de que capturas ambas frases, y omites el espacio...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/08/2010, 16:04
 
Fecha de Ingreso: mayo-2003
Mensajes: 544
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: Analizar string

Te hago otra pregunta con el siguiente codigo:

Código PHP:
$texto 'Perro Cielo Estrella tierra agua sol';

        if (
preg_match("/(cielo|estrella)(mar)*(?!perro)/i"$texto)) //tiene q estar 'cielo' o 'estrella', puede o no estar 'mar' y no debe estar 'gato'
            
echo "true";
        else
            echo 
"false"
Me devuelve true, cuando me tendría que devolver false, ya que en el texto tengo la palabra perro. Me imagino que debe dar ese resultado pq analiza perro al final del texto, y yo lo tengo al principio. Cómo puedo hacer para que no incida la posición en el texto?

muchas gracias!!
__________________
CSSBoulevar
Recursos para diseñadores y programadores webs
  #8 (permalink)  
Antiguo 08/08/2010, 12:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Analizar string

te sugiero leer una referencia:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

y en tu expresión te da true porque simplemente (mar)* significa, cero o mas apariciones de mar
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 08/08/2010, 17:53
 
Fecha de Ingreso: mayo-2003
Mensajes: 544
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: Analizar string

Hola pateketrueke

Ya leí esa documentación varias veces pero sigo sin entender.
El problema aca es que me da true cuando me tendría que dar false ya que la palabra perro aparece en el string y yo en el patrón quiero que no aparezca. Me explico bien?

Alguien me puede dar una mano?
__________________
CSSBoulevar
Recursos para diseñadores y programadores webs
  #10 (permalink)  
Antiguo 08/08/2010, 18:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Analizar string

mira, lo que esta sucediendo es que (?!) niega frases a la derecha... y tal ves necesites buscar a la izquierda con (?<!)

de verdad, te sugiero leer con atención las referencias al respecto...

igualmente te recomiendo investigar y leer mas referencias, guias y ejemplos pues en Internet hay bastante información...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: string
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 17:21.