Expresiones Regulares


Objetivo: Expresiones Regulares
Hola:

A través del componente gb.pcre, se puede trabajar en gambas con expresiones regulares (RegExps), creando patrones y obteniendo cadenas que coinciden con dichos patrones. Según la descripción del componente en cuestión, este gestor de RegExps es compatible también con la forma que tiene Perl de manejarlas.

Bien, Perl permite realizar sustitución de caracteres de forma parecida a la siguiente: s/a/b/, que sustituye la primera aparición de la letra a por una b.

Mi duda es la siguiente: ¿En gambas también se puede hacer ese tipo de sustituciones? Me estoy volviendo loco y no consigo que reconozca de ninguna forma los metacaracteres de separación (/) que delimitan la cadena original de la sustituida.

Muchas gracias de antemano.

Perfil MP  
Objetivo: Re: Expresiones Regulares
utiliza la función replace:

cadena2=Replace(texto,"a","b")

Te hace la sustitución de las "a" de la variable texto por "b" y lo almacena en cadena2

Suerte

Perfil MP  
Objetivo: Re: Expresiones Regulares
Muchas gracias por la respuesta, pero lamentablemente no me sirve. Lo de sustituir a por b era una simplificación.

Si estoy buscando un patrón más complicado, digamos palabras capicúas (palíndormos) de longitud 4 formadas por dos números y dos letras, la función referida no sirve para nada.

Me interesa saber si la sustitución empleada en Perl es posible realizarla utilizando el componente gb.pcre.

Gracias de nuevo

Perfil MP  
Objetivo: Re: Expresiones Regulares
Sorry, no conozco Perl.

Suerte

Perfil MP  
Objetivo: Re: Expresiones Regulares
Hola Aleking

Por fin alguien que le gustan las Regexp!!

Bien, creo que tu problema es que no estás escapando convenientemente los metacaracteres con una contrabarra (\) delante. Pero aún así, nunca he probado en gambas si funcionan las sustituciones al estilo de Perl, pero hasta donde yo he probado funcionan de maravilla.

Por ejemplo, aunque no te va a servir para nada, en este fragmento de código analizo y extraigo unos contenidos de una página web:

IF InStr(S, "#calldata") AND InStr(S, "* user style:") < 0 THEN
i = InStr(S, "id=\"calldata")
j = InStr(S, "style=\"margin-top:1.5em;")
IF j > i THEN calldata = Mid(S, i, (j - i))
'callsign
regex = NEW Regexp(calldata, "(?<=\\)\">).+(?=</b)")
sArr.Add(regex.Text)
'CSS class identifier
regex = NEW Regexp(calldata, "(?<=calldata\\s\\.).+(?=\\s\\{display:b)")
id = regex.Text

REPEAT
regex = NEW Regexp(calldata, "(?<=" & id & "\">).+(?=<)")
TRY calldata = Mid(calldata, regex.Offset + Len(regex.Text), Len(calldata) - regex.Offset)
sArr.Add(regex.Text)
UNTIL regex.Text = NULL

$qcall = sArr[0]
$fname = sArr[1]
$addr1 = sArr[2]
$addr2 = sArr[3]
$country = sArr[4]
sArr.Clear

ELSE


Fíjate que no todos los metacaracteres deben de ser escapados (en color verde).

Saludos

Perfil MP  
Objetivo: Re: Expresiones Regulares
Un placer, don Jesús:

En primer lugar, muchas gracias por atender mi solicitud, acompañándola de ese fragmento de código, que la verdad sea dicha, me sobrepasa un poco. Sin embargo, alcanzo a entrever que en ningún lugar del mismo aparece sustitución alguna (aunque quizá me equivoque).

El caso es que he probado a "escapar" de todas las formas que me ha permitido mi corto entendimiento y no he dado con la correcta. Yo también pienso que el problema debe radicar ahí -de hecho estoy convencido- e incluso me atrevería a insinuar que es posible que ni siquiera haya solución.

He probado otras variantes de patrones y también he quedado muy satisfecho. Sin embargo, las malditas sustituciones se me siguen resistiendo.

Muchas gracias otra vez.

Perfil MP  
Objetivo: Re: Expresiones Regulares
Aleking escribió: [Ver mensaje]
Sin embargo, las malditas sustituciones se me siguen resistiendo.

Muchas gracias otra vez.


Aunque este post es bastante antiguo, dejo esta información para futuras referencias. Las sustituciones son posibles usando Regex.Replace

http://gambaswiki.org/wiki/comp/gb.pcre/regexp/replace

Saludos

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.0886s (PHP: -16% SQL: 116%)
Consultas SQL: 22 - Debug off - GZIP Activado