Quantcast
Channel: Oracle
Viewing all articles
Browse latest Browse all 1814

Blog Post: Expresiones regulares: literales y metacaracteres.

$
0
0
Seguimos con la serie de artículos acerca del uso de expresiones regulares en Oracle. Haciendo un breve repaso, en una expresión regular combinamos literales y metacaracteres. Los literales se toman “tal cual son”; los metacaracteres, en cambio, tienen un significado especial. Por ejemplo, el metacaracter “.” iguala con cualquier carácter. ¿Qué ocurre si deseo buscar una cadena que contiene el literal “.”? Si utilizo el símbolo punto, Oracle lo considerará como un metacaracter, y por lo tanto el resultado no será el esperado: select texto, 'a.c' regexp, case when regexp_like(texto, 'a.c') then 'Hay coincidencia' else 'No hay coincidencia' end "COINCIDENCIA?" from prueba_regexp TEXTO REG COINCIDENCIA? ----------------------------------- --- ---------------- abc a.c Hay coincidencia a.c a.c Hay coincidencia aXc a.c Hay coincidencia ¿Cómo resolvemos la situación ante la cual nos encontramos? Necesitamos contar con alguna herramienta que nos permita indicar que un metacaracter no debe ser considerado como tal; y que sea interpretado precisamente como un literal. Casualmente dicha herramienta también es un metacaracter. A dicho metacaracter se lo conoce con el nombre de “escape” y es representado por la llamada “barra invertida” o “contrabarra” (“\”). Al usar el metacaracter de escape indicamos que el metacaracter posterior deberá ser interpretado como un literal y no como un metacaracter. Retomando nuestro ejemplo “reconstruiremos” nuestra expresión regular de la siguiente manera: “a\.c” select texto, 'a\.c' regexp, case when regexp_like(texto, 'a\.c') then 'Hay coincidencia' else 'No hay coincidencia' end "COINCIDENCIA?" from prueba_regexp TEXTO REGE COINCIDENCIA? ----------------------------------- ---- ------------------- abc a\.c No hay coincidencia a.c a\.c Hay coincidencia aXc a\.c No hay coincidencia Una situación particular ocurre cuando aparece la “barra invertida” entre nuestras cadenas de caracteres y queremos considerarla como literal. El uso de dos “barras invertidas” consecutivas me permite “escapar el escape”: select texto, 'a\\c' regexp, case when regexp_like(texto, 'a\\c') then 'Hay coincidencia' else 'No hay coincidencia' end "COINCIDENCIA?" from prueba_regexp TEXTO REGE COINCIDENCIA? ----------------------------------- ---- ------------------- abc a\\c No hay coincidencia a.c a\\c No hay coincidencia aXc a\\c No hay coincidencia a\c a\\c Hay coincidencia Nos vemos!

Viewing all articles
Browse latest Browse all 1814

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>