Página 1 de 1

Expresión regular para una línea

NotaPublicado: 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:

Sintáxis: [ Descargar ] [ Ocultar ]
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

NotaPublicado: 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.