SoloCodigo
Programación Web y Scripting => PHP => Mensaje iniciado por: gnfrs en Jueves 6 de Abril de 2006, 17:10
-
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,
-
no lo e probado pero se me ocurre (INI(.*)FIN)*
-
: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.
-
INI(.*?)FIN
Míra este manual
www.regular-expressions.info/tutorial.html (http://www.regular-expressions.info/tutorial.html)
-
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
-
Buenas, vi que respondieron a este mensaje aunque era un poco viejo me acuerdo !!!
El problema con esta expresión que mencionó Thanatos-chan
“((INI)[A-Z]*[0-9]*(FIN))” es que dentro de las cadenas INI - FIN puede encontrar nuevamente la misma cadena INI lo que ocasionaría un incorrecto parseo...
Al problema lo resolví hace bastante con la función preg_match_all, tal como lo indicó -DriverOp-
Saludos y gracias !
-
:P , cierto no tome eso en cuenta, por cierto, las funciones preg_match_all y no_preg_match, son unicas de php?
o se pueden usar en otro lenguaje, porque me interesa usarlas en conjunto con las funcines de la libreria RegExp que tiene visual studio.
-
Esas funciones están en PHP solamente, pero son compatibles con PERL (según el manual de PHP)... Por otro lado, la sintaxis de los patrones de expresiones regurales es un estándar, yo creo que en muchos lenguajes vas a encontrar cosas compatibles en cuanto a sintaxis, pero esas funciones ya no sé.... Probá y contanos, jeje
un saludo