Foros del Web » Programación para mayores de 30 ;) » RegExp »

Que hace esta expresion regular

Estas en el tema de Que hace esta expresion regular en el foro de RegExp en Foros del Web. Hola, ¿que hace esta expresión regular ? Código PHP: ^(?= aa ) b  Se supone que debe seleccionar por ejemplo aabx aacb aabf ...... pero ...
  #1 (permalink)  
Antiguo 23/02/2014, 11:17
 
Fecha de Ingreso: agosto-2010
Mensajes: 59
Antigüedad: 14 años, 4 meses
Puntos: 2
Que hace esta expresion regular

Hola, ¿que hace esta expresión regular ?
Código PHP:
^(?=aa)
Se supone que debe seleccionar por ejemplo aabx aacb aabf ...... pero no obtengo nada.

Código PHP:
if(preg_match('/^(?=aa)b/',$lna)){
    echo 
$lna.'<br>';

Gracias.
  #2 (permalink)  
Antiguo 23/02/2014, 11:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Que hace esta expresion regular

La expresión es bastante ambigua, ¿la has escrito tu?

Mas o menos significaría algo así como "lo que sea que empiece (no se sabe qué) y continúe con una doble a seguida de una b"

Y bueno, si lo piensas un poco no tiene nada de sentido, así que tu suposición es falsa.

Yo también hice varias pruebas y no captura lo que dices.

¿Qué tratas de resolver?

PDTA: también hay un foro de RegExp para que no tengas que publicar donde se te de la gana.

www.forosdelweb.com/f183/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/02/2014, 13:32
 
Fecha de Ingreso: agosto-2010
Mensajes: 59
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Que hace esta expresion regular

Bueno si lo escribí yo por curiosidad ya que con
Código:
^(?=aa)
obtenia todas las cadenas que tienen aa al inicio, pense que con
Código:
^(?=aa)b
obtendría todas las cadenas que empiezan con aa y que les sigue una b por ejemplo aannb aabfh ....

Seguiré repasando gracias
  #4 (permalink)  
Antiguo 23/02/2014, 20:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Que hace esta expresion regular

Para obtener las cadenas que empiecen con "aa" no hace falta usar sintaxis especial, he ahí un grave error.

Esto funciona como esperarías:
Cita:
/^aa.*b/
Para capturar "aabx aacb aabf" respectivamente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/02/2014, 11:48
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Que hace esta expresion regular

La sintaxis "?=" es sintaxis extendida de expresiones regulares, y hace lo que se conoce como "look ahead" (mirar hacia adelante). En la práctica funciona como un condicional, y la expresión dentro del look ahead NO consume caracteres de la cadena. El motivo por el que no funciona es que la expresión

^(?=aa)b

quiere decir, aproximadamente: "busca una b al principio de la cadena SOLAMENTE si la misma comienza con "aa". Como el look ahead no consume caracteres, tanto éste como la "b" quedan asociados al ancla ^. La cadena "aab" pasa la prueba del look ahead, pero no coincide con la expresión porque no comienza con una b. Rápidamente podemos concluir que ninguna cadena coincide con ese patrón, porque tiene el doble requisito de comenzar con una b y con "aa".

Usa el patrón que te sugiere paketetrueke, ese sí hace lo que necesitás.

Dicho sea de paso, ¿no estarías queriendo usar "?:" en vez de "?="? La forma ?: denota un grupo que no captura los datos que coinciden, puede ser más eficiente.


Saludos.

Etiquetas: expresion, php, regular
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 13:21.