Saltar al contenido

GPT para Regex – Pros y contras

24 de mayo de 2023

RegExGPT es un patio de recreo en línea que le permite ingresar una fuente y una cadena de destino para permitir que GPT genere la expresión regular para una coincidencia. Pero, ¿cuáles son los pros y los contras del enfoque GPT para la generación de código regex?


A pesar de su poder, las expresiones regulares vienen con sus propios desafíos; tienen una tendencia a volverse rápidamente ilegibles, por lo que comprenderlos se convierte en una cuestión de desofuscación, así como aprender a usarlos implica una curva pronunciada.

Como tal, siempre hubo intentos de facilitar el camino hacia el dominio de expresiones regulares generando expresiones regulares usando lenguaje natural o expresando la intención, incluso antes de la llegada de GPT.

Una de esas ocasiones fue utilizar la programación genética para ese propósito, como se describe en Generación automática de expresiones regulares con programación genética:

¿Es posible «criar» una expresión regular correcta para que no tenga que tomarse la molestia de resolverla usted mismo?

Cuando construye un programa de computadora, lo hace a través de una serie de instrucciones bien definidas que funcionan en un conjunto de datos y producen el resultado deseado.

Dado que nuestro enfoque aquí está en las expresiones regulares, digamos que nuestro objetivo es hacer coincidir solo los caracteres alfanuméricos de la cadena:

‘http://www.google.com’.

Siguiendo la forma tradicional, tendríamos que proporcionar una instrucción en forma de expresión regular, es decir

‘/[a-zA-Z]/gramo’

Pero, ¿y si pudiéramos empezar al revés? Es decir, ¿conseguir que el ordenador resuelva problemas sin estar programado explícitamente? ¿Cómo se puede hacer esto?

Con la programación genética podemos decirle a un programa de computadora lo que buscamos y dejar que genere un nuevo programa para nosotros que producirá el mismo resultado que nosotros mismos.

Aunque fue una iniciativa experimental, tuvo éxito, pero ahora, con la llegada de GPT, este proceso se ha convertido en la corriente principal y es más fácil de extraer, además de que también obtiene una explicación en inglés sencillo a lo largo del código generado.

Recomendado:  Cómo competir con los robots -- ScienceDaily

Entonces, la charla es sobre RegExGPT, una aplicación web que utiliza el poder del procesamiento del lenguaje natural para ayudar a los desarrolladores a lidiar con la dificultad y el tedio de las expresiones regulares.

Con RegExGPT, puede describir el patrón que está buscando en un lenguaje sencillo, y el motor alimentado por IA generará la expresión regular correspondiente para usted. El objetivo es hacer que las expresiones regulares sean accesibles para todos, independientemente de su nivel de experiencia.

Pongámoslo a prueba. Usted proporciona una cadena de origen y la salida deseada y deja que la IA genere la expresión adecuada. Estoy usando dos ejemplos en Perl, tomados de Expresiones regulares avanzadas de Perl – La expresión de código de patrón y Expresiones regulares avanzadas de Perl – Construcciones extendidas:

Prueba1:

texto de origen : imagen_de_a_&#x00A3

texto objetivo: imagen_de_una_£

este es el código que generó, junto con una buena explicación del mismo:

Prueba2. Otro intento más:

texto de origen : myimageऄwithधDevanagariमcharsफ. png

texto objetivo: miimagenxconxDevanagarixcharsx. png

generado :

Para validar las pruebas, ejecuté el código generado y lo convertí en un programa completo de Perl. El resultado es que ambas expresiones regulares funcionaron a la perfección.

Probemos algunos escenarios avanzados y casos extremos, como la coincidencia recursiva de texto equilibrado, el estándar de oro que sale directamente de la página de preguntas frecuentes sobre expresiones regulares de Perl:

¿Puedo usar expresiones regulares de Perl para hacer coincidir el texto equilibrado?

texto de origen:
Tengo algunos

> y
> >
y eso es.

Recomendado:  Big Data, Inteligencia Artificial y bioinformática: tres herramientas que salvan vidas

texto objetivo:

>
> >

Para tener un punto de referencia, revisemos la respuesta oficial en las preguntas frecuentes en https://regexr.com/:

Ahora a la respuesta RegExGPT.

El código inicial cuando se envolvió en un programa Perl resultó en un error de sintaxis ya que a la expresión regular le faltaba un prefijo, aunque estaba contenido en la explicación proporcionada por GPT debajo del código generado. Después de agregarlo, obtuvimos la siguiente expresión:

$text =~ s/<([^<>]*(?:(?R)[^<>]*)*)>//g;

Parecía lo suficientemente prometedor, vamos a probarlo en el programa Perl real (versión de Perl 5. 26. 3). Esto es lo que dio:

$text="I have some <brackets in <nested brackets> > and <another group <nested once <nested twice> > > and thats it.";

my @groups = $text =~ m/<([^<>]*(?:(?R)[^<>]*)*)>/g;
print "@groups";

Resultado no exactamente como se esperaba:

paréntesis en

otro grupo >

pero con un poco de ajuste:

$text =~ s/(<)([^<>]*(?:(?R)[^<>]*)*)(>)//g;

Resultado:

< paréntesis en

> < otro grupo > >

Por el bien de eso, intentémoslo de nuevo regenerando la respuesta. Esta vez GPT generó:

que resultó ser un error de sintaxis.

Entonces, la respuesta generada podría requerir algunos ajustes para que funcione. Mientras que en mi prueba limitada de RegExGPT no he encontrado tal caso. Sin embargo, al adoptar código generado automáticamente a partir de herramientas, se debe prestar especial atención. Por ejemplo, al generar expresiones regulares, sería bueno estar atento a las recetas generadas propensas a ReDOS, como se analiza en ¿Se pueden reutilizar las expresiones regulares de forma segura en todos los idiomas?:

La denegación de servicio de expresiones regulares (ReDoS) es un ataque de denegación de servicio que explota el hecho de que la mayoría de las implementaciones de expresiones regulares pueden llegar a situaciones extremas que hacen que funcionen muy lentamente (exponencialmente relacionado con el tamaño de entrada).

Un atacante puede hacer que un programa que usa una expresión regular entre en estas situaciones extremas y luego se cuelgue durante mucho tiempo.

Afortunadamente, el motor Perl lo protege. A decir verdad, esa estrella doble como en *)*) en la salida generada arriba parecía muy sospechoso, pero pasó la prueba, de lo contrario, Perl habría escupido un «Recursividad infinita en expresiones regulares» error.

Esto se debe a la protección que brinda PCRE contra ReDOS. Las PCRE (Expresiones regulares compatibles con Perl) tienen defensas explícitas contra el comportamiento de tiempo exponencial, ya que Perl mantiene un caché de estados visitados para cortocircuitar rutas redundantes a través de NFA, lo que le permite evaluar algunas búsquedas en tiempo lineal que toman tiempo polinomial o exponencial en otros. motores

En conclusión, dominar las Expresiones Regulares siempre fue un Arte Negro que requería mucho esfuerzo. Herramientas como RegExGPT ciertamente mejorarán la productividad al actuar como el compañero de los programadores. Simplemente no tome su palabra al pie de la letra.

Más información

RegExGPT

Artículos relacionados

Generación automática de expresiones regulares con programación genética

Expresiones regulares avanzadas de Perl: la expresión de código de patrón

Expresiones regulares avanzadas de Perl – Construcciones extendidas

¿Se pueden reutilizar las expresiones regulares de forma segura en todos los idiomas?

Para estar informado sobre nuevos artículos sobre I Programmer, suscríbase a nuestro boletín semanal, suscríbase a la fuente RSS y síganos en Gorjeo, Facebook o Linkedin.

Bandera

picolibro



Comentarios

o envíe su comentario por correo electrónico a: comments@i-programmer.info