• Publicidad

Expresión regular para una línea

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Expresión regular para una línea

Notapor BigBear » 2016-06-10 16:20 @722

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 ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Expresión regular para una línea

Notapor explorer » 2016-06-10 16:48 @741

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 3 invitados