Programación Web y Scripting > PHP
Expresiones Regulares
gnfrs:
Hola,
Tengo una cadena como la siguiente:
INI hola FIN INI chau FIN
Yo quiero (mediante expresiones regulares) obtener lo que hay entre los INI - FIN.
Para ello utilizo la expresión siguiente:
INI(.*)FIN
El problema está en que esa expresión me devuelve hola FIN INI chau, por lo que la expresión debería ser algo como esto:
INI([^FIN]*)FIN
Pero aquí hay otro problema, si la cadena anteriormente dicha es de esta forma:
INI hola F hola FIN INI chau FIN
La expresión regular me devuelve sólo la palabra chau debido a que el circunflejo ( ^ ) está negando cualquier caracter de la clase [FIN], es decir [^FIN] me niega cualquier letra F, I o N.
Lo que yo quiero es que niegue la palabra completa (FIN), he visto en un manual que puedo usar el punto de esta manera para explicitar la palabra completa, pero no me da resultado alguno: [^.FIN].
También he probado con muchas combinaciones pero no funciona por ejemplo:
[^[.FIN]]
[^(FIN)]
Si me pueden dar una mano les agradecería mucho.
Un saludo,
cluster:
no lo e probado pero se me ocurre (INI(.*)FIN)*
Thanatos-chan:
:rolleyes: , no se si ayude, por lo viejo del mensaje pero
si usas esta
“((INI)[A-Z]*[0-9]*(FIN))”
deberia funcionar
esta expresion esta indicando que debe comenzar con INI Y debe terminar con FIN
pero acepta que se repitan letras de la A a la Z 1 o mas veces y numeros del 0 al 9 y o mas veces, lo unico seria agregar los caracteres especiales.
vi en el otro post que esta usando .* pero no se si esto es un wildcard y funciona para todas las letras, espero que te ayude en algo.
maelmori:
INI(.*?)FIN
Míra este manual
www.regular-expressions.info/tutorial.html
-DriverOp-:
Cierto, esa es la expresión regular correcta, claro que para que tome dos resultados hay que usar preg_match_all y no preg_match
Navegación
[#] Página Siguiente
Ir a la versión completa