Expresión regular para una línea
Publicado:
2016-06-10 16:20 @722
por BigBear
Hola, estoy traduciendo una
regex a Delphi y quiero hacer una pregunta básica. Tengo lo siguiente:
Using text Syntax Highlighting
hola1 : 123
hola2 : 124
hola3 : 125
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Necesito solo
hola2 : 124. Entonces, uso una
regex así
/hola2 (.*?)/.
El tema es que no sé cómo representar el final de esa línea, porque mi
regex captura todo en adelante, o sea, todas las líneas después de hola2.
¿ Cómo se hace ?
Re: Expresión regular para una línea
Publicado:
2016-06-10 16:48 @741
por explorer
Cuando pones un modificador no avariciosa, como el caso de .*?, el motor de expresiones regulares debe saber ante qué carácter debe pararse. Si no pones ninguno, pues se lo come todo.
Como dices que captura todo, sospecho que es debido a que has leído todo el archivo de golpe, y no lo estás procesando línea por línea.
Entonces, hay que saber hasta dónde pararse.
Sería algo así:
/hola2 : (.*?)\b/
El ancla '\b' indica "frontera de palabra", así que, el operador no avaricioso terminará justo cuando termine de capturar lo que sigue a hola2.
Otra opción sería:
/hola2 : (.*?)$/m
Con '/m' indicamos que vamos a procesar un texto multilínea, así que el significado de las anclas '^' y '$' cambian, y pasan a referirse a, respectivamente, a principio y fin de cada línea dentro del texto.