Está en la página 1de 13

Expresiones Regulares en PostgreSQL

Manuel Flores Farfán


Luis Sullca Huaracca
klever Pereyra Rios

1.- Objetivos

 Entender el funcionamiento de las expresiones regulares.


 Crear ER con caracteres especiales.
 Usar cadenas sin procesar en ER.
 Sustituir texto con expresiones regulares.

2.- Conceptos previos

2.1 Coincidencia de patrones

Hay tres enfoques diferentes para la coincidencia de patrones proporcionados por


PostgreSQL : el operador SQL LIKE tradicional, el operador SIMILAR TO más reciente
(agregado en SQL: 1999) las expresiones regulares de estilo POSIX(Portable Operating System
Interface Unix)⁴. Además, está disponible una función de coincidencia de patrones, substring ,
que utiliza expresiones regulares SIMILAR TO -style o POSIX-style.

LIKE
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]

Cada pattern (patrón) define un conjunto de cadenas. La expresión LIKE devuelve verdadero si el
string está contenida en el conjunto de cadenas representadas por patrón . (Como era de esperar,
la expresión NOT LIKE devuelve false si LIKE devuelve true, y viceversa. Una expresión
equivalente es NOT(string LIKE pattern). Si el patrón no contiene signos de porcentaje o guión
bajo, entonces el patrón solo representa la cadena misma. Un guión bajo ( _ ) en el patrón
representa (coincide) cualquier carácter individual; un signo de porcentaje ( % ) coincide con
cualquier cadena de cero o más caracteres.
Algunos ejemplos:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE C false

LIKE coincide con el patrón siempre cubre toda la cadena. Para hacer coincidir una secuencia en
cualquier lugar dentro de una cadena, el patrón debe comenzar y terminar con un signo de
porcentaje.
Para hacer coincidir un subrayado literal o un signo de porcentaje sin coincidir con otros caracteres,
el carácter respectivo en el patrón debe estar precedido por el carácter de escape. El carácter de
escape predeterminado es la barra diagonal inversa, Para hacer coincidir el carácter de escape en sí,
escriba DOS caracteres de escape.
También es posible seleccionar ningún carácter de escape escribiendo ESCAPE '' . Esto desactiva
de manera efectiva el mecanismo de escape,

Tenga en cuenta que la barra invertida ya tiene un significado especial en los literales de cadena, por
lo que para escribir una constante de patrón que contenga una barra invertida, debe escribir dos
barras diagonales inversas en una instrucción SQL.

La palabra clave ILIKE se puede usar en lugar de LIKE para hacer que la coincidencia sea
insensible a mayúsculas / minúsculas de acuerdo con la configuración regional activa. Esto no está
en el estándar SQL pero es una extensión de PostgreSQL .
El operador ~~ es equivalente a LIKE , y ~~* corresponde a ILIKE . También hay “n” operadores
de !~~ y !~~* que representan NOT LIKE y NOT ILIKE , respectivamente. Todos estos op!
eradores son específicos de PostgreSQL .
SIMILAR TO

string SIMILAR TO pattern [ESCAPE escape-character]


string NOT SIMILAR TO pattern [ESCAPE escape-character]

El operador SIMILAR TO devuelve verdadero o falso dependiendo de si su patrón coincide


con la cadena dada. Es muy parecido a LIKE , excepto que interpreta el patrón usando la definición
de estándar de SQL de una expresión regular. Las expresiones regulares de SQL son un curioso
cruce entre la notación LIKE y la notación común de expresiones regulares.
Al igual que LIKE , el operador SIMILAR TO tiene éxito solo si su patrón coincide con la cadena
completa; esto es diferente a la práctica común de expresión regular, en donde el patrón puede
coincidir con cualquier parte de la cadena. También como LIKE , SIMILAR TO usa _ y % como
caracteres comodín que denotan cualquier carácter individual y cualquier cadena, respectivamente
Además de estas instalaciones prestadas de LIKE , SIMILAR TO admite estos metacaracteres de
coincidencia de patrones tomados de expresiones regulares POSIX:
• | denota la alternancia (cualquiera de las dos alternativas).

• * denota la repetición del elemento anterior cero o más veces.

• + denota la repetición del artículo anterior una o más veces.


• Los paréntesis () se pueden usar para agrupar elementos en un único elemento lógico.

• Una expresión de paréntesis [...] especifica una clase de carácter, al igual que en las
expresiones regulares POSIX.
Algunos ejemplos:
'abc' SIMILAR TO 'abc' true
'abc' SIMILAR TO 'a' false
'abc' SIMILAR TO '%(b|d)%' true
'abc' SIMILAR TO '(b|c)%' false

3.- Expresiones Regulares POSIX

Operadores disponibles para la coincidencia de patrones utilizando expresiones regulares POSIX.

Operador Descripción Ejemplo


'thomas' ~ '. *
~ Coincide con la expresión regular thomas. *'
Coincide con la expresión regular, sin distinción de 'thomas' ~ * '. *
~ *
mayúsculas y minúsculas Thomas. *'

! ~ No coincide con expresiones regulares, distingue entre 'Thomas'! ~ '. *


mayúsculas y minúsculas Thomas. *'
No coincide con la expresión regular, no distingue 'thomas'! ~ * '. *
! ~ *
entre mayúsculas y minúsculas vadim. *'

Las expresiones regulares de POSIX proporcionan un medio más poderoso para la coincidencia de
patrones que los operadores LIKE y SIMILAR TO . Muchas herramientas de Unix, como egrep ,
sed o awk, usan un lenguaje de coincidencia de patrones similar al descrito aquí.
A diferencia de los patrones LIKE , se permite que una expresión regular coincida en cualquier
lugar dentro de una cadena, a menos que la expresión regular esté explícitamente anclada al
principio o al final de la cadena.
Algunos ejemplos:

'abc' ~ 'abc' true


'abc' ~ '^a' true
'abc' ~ '(b|d)' true
'abc' ~ '^(b|c)' false*
*no esta el b y no esta el c

La función de substring con dos parámetros, substring( string from pattern ) , proporciona la
extracción de una subcadena que coincide con un patrón de expresión regular POSIX. Devuelve
nulo si no hay coincidencia, de lo contrario, la parte del texto que coincide con el patrón.
Pero si el patrón contiene paréntesis, se devuelve la parte del texto que coincide con la primera
subexpresión entre paréntesis (aquella cuyo paréntesis izquierdo es el primero). Puede poner
paréntesis alrededor de toda la expresión si desea usar paréntesis dentro de esta sin activar esta
excepción. Si necesita paréntesis en el patrón antes de la subexpresión que desea extraer, consulte
los paréntesis que no se capturan que se describen a continuación.
Algunos ejemplos:
substring('foobar' from 'o.b') oob
substring('foobar' from 'o(.)b') o //o es el caracter que ocupa el lugar
dentro del parentesis

La función regexp_replace proporciona sustitución de texto nuevo para subcadenas que coinciden
con los patrones de expresión regular POSIX.
Tiene la sintaxis regexp_replace( source , pattern , replacement [ , flags ]). La cadena Source se
devuelve sin cambios si no hay coincidencia con el patrón . Si hay una coincidencia, la cadena
fuente se devuelve con la cadena de reemplazo sustituida por la subcadena correspondiente. La
cadena de replacement puede contener \ n , donde n es 1 a 9 , para indicar que la subcadena de
origen que coincide con la subexpresión entre paréntesis n del patrón debe insertarse, y puede
contener \ & para indicar que la subcadena coincide con todo el patrón debe ser insertado. Escriba \\
si necesita poner una barra invertida literal en el texto de reemplazo.
El parámetro flag es una cadena de texto opcional que contiene cero o más indicadores de una sola
letra que cambian el comportamiento de la función.
Bandera i especifica la coincidencia insensible a mayúsculas y minúsculas, mientras que la bandera
g especifica el reemplazo de ctodas las subcadena coincidente en lugar de solo la primera.
Algunos ejemplos:
regexp_replace ('foobarbaz', 'b ..', 'X') fooXbaz

regexp_replace ('foobarbaz', 'b ..', 'X', 'g') fooXX //aqui reemplaza


todas las subcadenas

regexp_replace ('foobarbaz', 'b (..)', 'X \\ 1Y', 'g') fooXarYXazY

CLASES
3.1 Expresiones Regulares Details (detalles)

Las expresiones regulares ( RE s), tal como se definen en POSIX 1003.2, vienen en dos formas:
extended RE o ERE s (aproximadamente las de egrep ),
basic RE 's o BRE (aproximadamente los de ed ).
PostgreSQL es compatible con ambos formularios y también implementa algunas extensiones que
no están en el estándar POSIX, pero se han vuelto ampliamente utilizadas debido a su
disponibilidad en lenguajes de programación como Perl y Tcl. Las RE que usan estas extensiones
que no son POSIX se denominan avanced ERS o ARE en esta documentación. LRE.
Nota: La forma de expresiones regulares aceptadas por PostgreSQL puede elegirse
configurando el parámetro de tiempo de ejecución regex_flavor .

Una expresión regular se define como una o más ramas , separadas por | . Coincide con cualquier
cosa que coincida con una de las ramas.
Una rama es cero o más quantified atom o constraints , concatenados. Coincide con un partido para
el primero, seguido de un partido para el segundo, etc. una rama vacía coincide con la cadena vacía.
*)Un átomo puede ser cualquiera de las posibilidades que se muestran en la Tabla 9-12 .
coincide---> empezar a partir del siguiente caracter
Tabla 9-12. Átomos de expresión regular

Átomo Descripción
(donde re es cualquier expresión regular) coincide con una coincidencia para re ,
( re )
con la coincidencia indicada para posibles informes
como se indicó anteriormente, pero la coincidencia no se observa para informar (un
(?: re )
conjunto de paréntesis "no capturable" ) (ARE solamente)
. coincide con cualquier carácter
[char ] una expresión de corchete , que coincide con cualquiera de los caracteres
(donde k es un carácter no alfanumérico) coincide con ese carácter tomado como un
\k
carácter ordinario, por ejemplo, \\ coincide con un carácter de barra invertida
\c donde c es alfanumérico (posiblemente seguido de otros caracteres) es un escape
cuando va seguido de un carácter que no sea un dígito, coincide con el carácter del
{ paréntesis izquierdo { ;
cuando está seguido por un dígito, es el comienzo de un límite
X donde x es un solo carácter sin otro significado, coincide con ese
Una RE no puede terminar con \ .
Nota: Recuerde que la barra invertida ( \ ) ya tiene un significado especial en los
literales de cadena PostgreSQL . Para escribir una constante de patrón que contenga una
barra diagonal inversa, debe escribir dos barras diagonales inversas en la instrucción.

*)Los posibles cuantificadores y sus significados se muestran en la Tabla 9-13 .


Tabla 9-13. Cuantificadores de expresiones regulares

Cuantificador Partidos
* una secuencia de 0 o más coincidencias del átomo
+ una secuencia de 1 o más coincidencias del átomo
? una secuencia de 0 o 1 coincidencias del átomo
{m} una secuencia de exactamente m coincidencias del átomo
{ m ,} una secuencia de m o más coincidencias del átomo
Cuantificador Partidos
{m,n} una secuencia de m a n (inclusivo) coincidencias del átomo; m no puede exceder n
*? versión non-greedy de *
+? versión non-greedy de +
?? versión non-greedy de ?
{ m }? versión non-greedy de { m }
{ m ,}? versión non-greedy de { m ,}
{ m , n }? versión non-greedy de { m , n }

Los formularios que usan { ... } se conocen como límites . Los números m,n dentro de un límite son
enteros decimales sin signo con valores permitidos de 0 a 255 inclusive.
Los cuantificadores non-greedy (disponibles solo en ARE) coinciden con las mismas posibilidades
que sus contrapartes normales ( greedy ) correspondientes, pero prefieren el número más pequeño
en lugar del mayor número de coincidencias.
Nota: Un cuantificador no puede seguir inmediatamente a otro cuantificador. Un
cuantificador no puede comenzar una expresión o subexpresión ni seguir ^ o | .

*)Una restricción coincide con una cadena vacía, pero coincide solo cuando se cumplen
condiciones específicas. Se puede usar una restricción donde se puede usar un átomo, excepto que
no puede ser seguido por un cuantificador. Las restricciones simples se muestran en la Tabla 9-14 ;
algunas restricciones más se describen más adelante.
Tabla 9-14. Restricciones de expresión regulares

Constraint Description
^ coincide al comienzo de la cadena
$ Coincide al final de la cadena
coincidencias positivas de búsqueda anticipada en cualquier punto donde comience
(?=re)
una coincidencia de subcadenas (solo ARE)
oincidencias de búsqueda anticipada negativa en cualquier punto donde no comienza
(?!re)
la coincidencia de subcadenas (solo ARE)

3.2 ER Bracket (corchete)


Una expresión de corchete es una lista de caracteres encerrados en [] . Por lo general, coincide con
cualquier carácter individual de la lista. Si la lista comienza con ^ , coincide con cualquier carácter
individual que no sea del resto de la lista. Si dos caracteres en la lista están separados por - , esto es
una abreviación para el rango completo de caracteres entre esos dos (inclusive) en la secuencia de
clasificación, por ejemplo, [0-9] en ASCII coincide con cualquir cifra decimal.
Para incluir un literal ] en la lista, conviértalo en el primer caracter (después de un posible ^ ). Para
incluir un literal - , conviértalo en el primer o último caracter o en el segundo punto final de un
rango.
Dentro de una expresión de corchete, un elemento de clasificación (un carácter, una secuencia de
caracteres múltiples que se agrupa como si fuera un solo carácter, o un nombre de secuencia de
clasificación para uno y otro) encerrado en [.and .] representa la secuencia de caracteres de ese
elemento de clasificación.
Dentro de una expresión de corchetes, un elemento de clasificación incluido en [= and =] es una
clase de equivalencia, representando las secuencias de caracteres de todos los elementos de
clasificación equivalentes a esa, incluido él mismo. (Si no hay otros elementos de clasificación
equivalentes, el tratamiento es como si los delimitadores adjuntos fueran [. and. ] .) Por ejemplo,
si o y ^ son los miembros de una clase de equivalencia, entonces [[= o =]] , [[= ^ =]] , y
[o ^] son sinónimos. Una clase de equivalencia puede no ser un punto final de un rango.

Hay dos casos especiales de expresiones de paréntesis: las expresiones de paréntesis [[: <:]] y
[[:>:]] son restricciones, haciendo coincidir cadenas vacías al principio y al final de una
palabra, respectivamente. Una palabra se define como una secuencia de caracteres de palabra que
no está precedida ni seguida por caracteres de palabra.

3.3 ER Escapes (escape)


Los escapes son secuencias especiales que comienzan con \ seguido de un carácter alfanumérico.
Los escapes vienen en varias variedades: entrada de caracteres, escapes de restricciones y
referencias anteriores.
Los escapes de entrada de caracteres existen para facilitar la especificación de caracteres que no
sean de impresión y otros inconvenientes en RE. Se muestran en la tabla 9-15 .
Los escapes de clase y taquigrafía proporcionan shorthands para ciertas clases de caracteres de uso
común. Se muestran en la Tabla 9-16 .
Un escape de restricción es una restricción, que coincide con la cadena vacía si se cumplen
condiciones específicas, escrito como un escape. Se muestran en la tabla 9-17 .
Una referencia de retorno ( \ n ) coincide con la misma cadena coincidente con la subexpresión
entre paréntesis previa especificada por el número n (consulte la Tabla 9-18 ). Por ejemplo, ([bc]) \
1 coincide con bb o cc pero no con bc o cb . La subexpresión debe preceder completamente a la
referencia posterior en el RE. Las subexpresiones están numeradas en el orden de sus paréntesis
iniciales. Los paréntesis que no capturan no definen subexpresiones.
Nota: Tenga en cuenta que un \ encabezado de escape tendrá que doblarse al ingresar el
patrón como una constante de cadena de SQL. Por ejemplo:

'123' ~ '^ \\ d {3}' true


Tabla 9-15. Escapes de entrada de caracteres de expresión regular

Escape Description
\a carácter de alerta (campana), como en C
\b retroceso, como en C
\B Sinónimo de \ para ayudar a reducir la necesidad de doble backslash
\cX sinónimo de \ para ayudar a reducir la necesidad de doblar la barra invertida
(donde X es cualquier carácter) el carácter cuyos 5 bits de orden inferior son los
\e
mismos que los de X , y cuyos otros bits son todos cero
el personaje cuyo nombre de secuencia de clasificación es ESC , o en su defecto, el
\f
carácter con valor octal 033
\n alimentación de formulario, como en C
\r nueva línea, como en C
\t Tab horizontal
\v Pestaña vertical…Mismo uso en c
(donde hhh es cualquier secuencia de dígitos hexadecimales) el carácter cuyo
\xhhh valor hexadecimal es 0x hhh (un solo carácter, sin importar cuántos dígitos
hexadecimales se usen)
\0 Carácter con valor 0
\xy (donde xy es exactamente dos dígitos octales, y no es una referencia posterior )
\xyz donde wxyz tiene exactamente cuatro dígitos hexadecimales)

Tabla 9-16. Expresión de clase regular: Taquigrafía

Escapar Descripción
\d [[:dígito:]]
\s [[:espacio:]]
\w [[: alnum:] _] (se incluye un guion bajo)
\D [^ [: digit:]]
\S [^ [: espacio:]]
\W [^ [: alnum:] _] (se incluye un guion bajo)

Tabla 9-17. Restricción de expresión regular escapa

Escapar Descripción
\A coincide solo al principio de la cadena
\m coincide solo al comienzo de una palabra
\M coincide solo al final de una palabra
\ y coincide solo al principio o al final de una palabra
\ Y coincide solo en un punto que no es el comienzo ni el final de una palabra
Escapar Descripción
coincide solo al final de la cadena (consulte la Sección 9.7.3.5 para ver cómo difiere de
\ Z
$)

Tabla 9-18. Expresión regular Volver referencias

Escapar Descripción
(donde m es un dígito distinto de cero) una referencia posterior a la subexpresión m
\m
'ésima
(donde m es un dígito distinto de cero, y nn es algunos dígitos más, y el valor decimal
\ mnn mnn no es mayor que el número de paréntesis de captura de cierre visto hasta ahora) una
referencia a la subexpresión mnn 'th

Nota: Existe una ambigüedad histórica inherente entre los escapes de entrada de
caracteres octal y las referencias posteriores, que se resuelven mediante heurística,
como se insinuó anteriormente. Un cero inicial siempre indica un escape octal. Un único
dígito distinto de cero, no seguido de otro dígito, siempre se toma como referencia. Una
secuencia multidigital que no comienza con un cero se toma como una referencia
posterior si se produce después de una subexpresión adecuada (es decir, el número está
en el rango legal para una referencia posterior), y de lo contrario se toma como octal.

3.4 ER Metasyntax

Además de la sintaxis principal descrita anteriormente, hay algunas formas especiales y varias
facilidades sintácticas disponibles.
Normalmente, el tipo de RE que se usa está determinado por regex_flavor . Sin embargo, esto
puede ser anulado por un prefijo de director . Si una RE comienza con ***:, el resto de la RE se
toma como ARE independientemente de regex_flavor . Si una RE comienza con *** = , el resto de
la RE se toma como una cadena literal, con todos los caracteres considerados caracteres normales.
Un ARE puede comenzar con opciones incrustadas : una secuencia (? Xyz ) (donde xyz es uno o
más caracteres alfabéticos) especifica las opciones que afectan al resto del RE. Estas opciones
anulan cualquier opción determinada previamente (incluyendo tanto el sabor RE como la
sensibilidad de mayúsculas y minúsculas). Las letras de opción disponibles se muestran en la Tabla
9-19 .
Tabla 9-19. SON letras de opción incrustadas

Opción Descripción
b el resto de RE es un BRE
c distinción entre mayúsculas y minúsculas
Opción Descripción
e el resto de RE es un ERE
i coincidencia insensible a mayúsculas y minúsculas (anula el tipo de operador)
m sinónimo histórico para n
n concordancia sensible a la nueva línea (ver Sección 9.7.3.5 )
p correspondencia parcial sensible a la nueva línea (ver Sección 9.7.3.5 )
q el resto de RE es una cadena literal ( "citada" ), todos los caracteres comunes
s correspondencia no sensible a la nueva línea (por defecto)
t sintaxis ajustada
w coincidencia parcial inversa sensible a la nueva línea ( "raro" )
X sintaxis expandida

Las opciones incorporadas entran en vigencia en el ) finalizando la secuencia. Pueden aparecer solo
al comienzo de una ARE (después del ***: si lo hay).
Además de la sintaxis de RE ( estrecha ) habitual, en la que todos los caracteres son significativos,
existe una sintaxis expandida , disponible al especificar la opción x incrustada. En la sintaxis
expandida, los caracteres de espacio en blanco en el RE se ignoran, al igual que todos los caracteres
entre un # y la siguiente línea nueva (o el final de la RE). Esto permite hacer un párrafo y comentar
un RE complejo. Hay tres excepciones a esa regla básica:
• un carácter de espacio en blanco o # precedido por \ se retiene

• espacio blanco o # dentro de una expresión de corchete se conserva

• el espacio en blanco y los comentarios no pueden aparecer dentro de los símbolos de varios
caracteres, como (?:
Para este propósito, los espacios en blanco están en blanco, tab, nueva línea y cualquier carácter que
pertenezca a la clase de caracteres espaciales .
3.5 ER Matching Rules (regla de coincidencias)

En el caso de que una RE pueda coincidir con más de una subcadena de una cadena dada. Si el RE
puede coincidir con más de una subcadena que comience en ese punto, se tomará la coincidencia
más larga posible o la coincidencia más corta posible, dependiendo de si el RE es greddy o non-
greedy .
Si un RE es greedy o no, está determinado por las siguientes reglas:
• La mayoría de los Indicadores y todas las restricciones no tienen atributo de avaricia

• Agregar paréntesis alrededor de un RE no cambia su codicia.

• Un INDICADOR cuantificado con un cuantificador de repetición fija ( { m } o { m }? )


Tiene la misma codicia (posiblemente ninguna) que el indicador mismo.
• Un átomo cuantificado con otros cuantificadores normales (que incluyen { m , n } con m
igual a n ) es codicioso (prefiere la coincidencia más larga).

• Un átomo cuantificado con un cuantificador no codicioso (que incluye { m , n }? Con m


igual a n ) no es codicioso (prefiere el emparejamiento más corto).

• Una rama, es decir, una RE que no tiene nivel superior | operador: tiene la misma codicia
que el primer átomo cuantificado que tiene un atributo de avaricia.
• Una RE que consta de dos o más ramas conectadas por | el operador siempre es codicioso.

Las reglas anteriores asocian atributos de avaricia no solo con átomos cuantificados individuales,
sino con ramas y RE completos que contienen átomos cuantificados. Lo que eso significa es que la
coincidencia se realiza de tal manera que la rama, o RE completa, coincida con la subcadena más
larga o más corta posible como un todo . Una vez que se determina la duración de la coincidencia
completa, la parte de ella que coincide con cualquier subexpresión particular se determina sobre la
base del atributo greediness de esa subexpresión, con subexpresiones que comienzan antes en la RE
teniendo prioridad sobre las que comienzan más tarde.
Un ejemplo de lo que esto significa:
SELECCIONAR SUBSTRING ('XY1234Z', 'Y * ([0-9] {1,3})');
Resultado: 123

SELECCIONAR SUBSTRING ('XY1234Z', 'Y *? ([0-9] {1,3})');


Resultado: 1

En el primer caso, el RE en su conjunto es codicioso porque Y * es codicioso. Puede coincidir


comenzando en Y , y coincide con la cadena más larga posible que comienza allí, es decir, Y123 .
El resultado es la parte entre paréntesis de eso, o 123 .

En el segundo caso, el RE como un todo no es codicioso porque Y *? no es codicioso Puede


coincidir comenzando en Y , y coincide con la cadena más corta posible que comienza allí, es decir,
Y1 . La subexpresión [0-9] {1,3} es codiciosa, pero no puede cambiar la decisión en cuanto a
la duración total del partido; por lo que está obligado a coincidir solo con 1 .

Los cuantificadores {1,1} y {1,1}? se puede usar para forzar la codicia o no avaricia,
respectivamente, en una subexpresión o un RE completo.
Las duraciones de los partidos se miden en caracteres, no en elementos de clasificación. Una cadena
vacía se considera más larga que ninguna coincidencia. Por ejemplo: bb * coincide con los tres
caracteres centrales de abbbc ; (week | wee) (night | knights) coincide con los diez
caracteres de weeknights ; cuando (. *). * se compara con abc, la subexpresión entre
paréntesis coincide con los tres caracteres; y cuando (a *) * se compara contra bc tanto la RE
entera como la subexpresión entre paréntesis coinciden con una cadena vacía.
Si se especifica el emparejamiento independiente del caso, el efecto es como si todas las
distinciones de caso hubieran desaparecido del alfabeto. Cuando un alfabético que existe en varios
casos aparece como un carácter ordinario fuera de una expresión de corchetes, se transforma
efectivamente en una expresión de corchetes que contiene ambos casos, por ejemplo, x se
convierte en [xX] . Cuando aparece dentro de una expresión de corchete, todas las contrapartidas
de su caso se agregan a la expresión del corchete, por ejemplo, [x] se convierte en [xX] y [^
x] se convierte en [^ xX] .

Si se especifica una coincidencia sensible a la nueva línea,. y las expresiones de corchetes que usan
^ nunca coincidirán con el carácter de nueva línea (para que las coincidencias nunca crucen nuevas
líneas a menos que la RE lo organice explícitamente) y ^ y $ coincidirán con la cadena vacía antes
y después de una nueva línea respectivamente, además de coincidir al principio y al final de cuerda
respectivamente. Pero los escapes ARE \ A y \ Z continúan coincidiendo con el principio o el
final de la cadena solamente .
Si se especifica una coincidencia parcial sensible a la nueva línea, esto afecta . y expresiones de
corchetes como con coincidencias sensibles a la nueva línea, pero no ^ y $ .

Si se especifica la coincidencia inversa parcial sensible a la nueva línea, esto afecta a ^ y $ como
con la concordancia sensible a la nueva línea, pero no . y expresiones de corchetes. Esto no es muy
útil, pero se proporciona para la simetría.
3.6 ER Básicas

Los BRE difieren de los ERE en varios aspectos. |, + y ? son caracteres comunes y no hay un
equivalente para su funcionalidad. Los delimitadores para los límites son \ { y \} , con { y } por
sí mismos caracteres comunes. Los paréntesis para las subexpresiones anidadas son \ ( y \) , con
( y ) por sí mismos caracteres normales. ^ es un carácter ordinario, excepto al comienzo de la RE o
al comienzo de una subexpresión entre paréntesis, $ es un carácter ordinario, excepto al final de la
RE o al final de una subexpresión entre paréntesis, y *es un carácter ordinario si aparece al
comienzo de la RE o al comienzo de una subexpresión entre paréntesis (después de una posible
dirección ^ ). Finalmente, están disponibles referencias de un solo dígito, y \ < y \> son
sinónimos para [[: <:]] y [[:>:]] respectivamente; no hay otros escapes disponibles.

4.- Limites y Compatibilidad

No se impone ningún límite particular en la duración de las RE en esta implementación. Sin


embargo, los programas destinados a ser altamente portátiles no deberían emplear RE de más de
256 bytes,
Existen dos incompatibilidades significativas entre ARE y la sintaxis ERE reconocida por las
versiones anteriores a la 7.4 de PostgreSQL :
• En ARE, \ seguido de un carácter alfanumérico es un escape o un error, mientras que en
versiones anteriores, era simplemente otra forma de escribir el alfanumérico. Esto no debería
ser un gran problema porque no había ninguna razón para escribir una secuencia de este tipo
en versiones anteriores.
• En ARE, \ permanece como un carácter especial dentro de [] , por lo que un literal \
dentro de una expresión de corchete debe escribirse \\ .

Si bien es poco probable que estas diferencias creen un problema para la mayoría de las
aplicaciones, puede evitarlas si es necesario estableciendo regex_flavor en extended .

5.- Conclusiones

• Se comprende el funcionamiento de expresiones regulares además de su uso en el trabajo


con strings
• Utilizando las funciones dadas por POSIX podemos utilizar las cadenas de una manera
eficiente, desde sustituir texto hasta buscar caracteres especiales.

6.- Referencias
⁴ https://www.istr.unican.es/publications/mgh-1993b.pdf
https://www.postgresql.org/docs/manuals/

También podría gustarte