FileMenu Tools utiliza la sintaxis de expresiones regulares del lenguaje de programación Perl. Con las expresiones regulares se pueden definir patrones de búsqueda y reemplazo. Este mecanismo proporciona una gran potencia cuando se quiere buscar y/o reemplazar un texto.

En esta sintaxis todos los caracteres tienen concordancia en sí mismos excepto para los siguientes caracteres especiales:

.[]{}()\*+?|^$

Si se desea utilizar alguno de los caracteres anteriores como literales hay que anteponerle el carácter \. Por ejemplo, si se desea utilizar el carácter ? como literal, habrá que indicarlo con \?, sino  se hace así el carácter ? se interpretará como un operador y por lo tanto el comportamiento no sería el deseado.

Carácter comodín

El carácter '.' concuerda con cualquier carácter, excepto el carácter de nueva línea y retorno de carro.

Inicio y final de línea

El carácter ^ concuerda con el inicio de línea, es decir, si se incluye este carácter al inicio del patrón de búsqueda, la búsqueda se producirá sólo al principio de las líneas.

El carácter $ concuerda con el final de línea, es decir, si se incluye este carácter al final del patrón de búsqueda, la búsqueda se producirá sólo al final de las líneas.

Definición de sub-expresiones

Una sección que empieza con ( y termina con ) actúa como una sub-expresión. Las sub-expresiones utilizadas en el patrón de búsqueda son almacenadas en un registro y pueden ser posteriormente referenciadas en el propio patrón de búsqueda o al reemplazar. Para referenciar una sub-expresión se debe utilizar \n, donde n es el índice de la sub-expresión (entre 1 y 9).

Agrupación sin definir sub-expresiones

La definición de una sub-expresión es útil para agrupar parte de una expresión regular, pero tiene el resultado de crearse un nuevo registro para su uso posterior. Como alternativa se puede crear una agrupación en una expresión regular pero sin generar una sub-expresión usando (?: y ). Por ejemplo (?:ab)+ repetirá "ab" sin generar una sub-expresión separada.

Repeticiones

Cualquier carácter o agrupación puede ser repetida usando los operadores *, +, ? y { }.

El operador * concuerda con cero o más repeticiones de la expresión anterior. Por ejemplo: la expresión a*b concuerda con cualquiera de lo siguiente:

b

ab

aaaaaaaab

El operador + concuerda con uno o más repeticiones de la expresión anterior. Por ejemplo: la expresión a+b concuerda con cualquiera de lo siguiente:

ab

aaaaaaaab

Pero no concuerda con:

b

El operador ? concuerda con cero o una repeticiones de la expresión anterior. Por ejemplo: la expresión ca?b concuerda con cualquiera de lo siguiente:

cb

cab

Pero no concuerda con:

caab

Una expresión puede ser repetida n veces con el operador { }, de la siguiente manera:

  • a{n} concuerda con n repeticiones de 'a'.
  • a{n,} concuerda con n o más repeticiones de 'a'.
  • a{n, m} concuerda con n a m repeticiones de 'a'.

Por ejemplo:

^a{2,3}$

Tiene concordancia con alguna de las siguientes:

aa

aaa

Pero no tiene concordancia con:

a

aaaa

No es posible utilizar un operador de repetición si la expresión anterior no puede ser repetida. Por ejemplo::

a(*)

Se producirá un error y no habrá nada donde aplicar el operador *.

Sustituciones

El carácter de escape seguido por un dígito n, donde n está comprendido entre 1 y 9, concuerda la misma cadena que tenía concordancia por la sub-expresión n. Por ejemplo, la expresión siguiente:

^(a*).*\1$

Tiene concordancia con la cadena:

aaabbaaa

Pero no con la cadena:

aaabba

Las sustituciones también pueden ser utilizadas dentro de las expresiones de reemplazo para cuando se reemplaza un texto.

Alternativa

El operador | concuerda con alguno de los argumentos, por ejemplo: abc|def concordará con "abc" o con "def".

El paréntesis puede ser utilizado para agrupar alternativas, por ejemplo: ab(c|ef) concordará con "abc" o con "abef".

Las alternativas vacías no están permitidas. Si se quiere indicar una alternativa vacía es necesario utilizar la directiva (?:), por ejemplo:

"|abc" no es una expresión válida, pero
"(?:)|abc" sí es válida, al igual que la expresión:
"(?:abc)??" que tiene el mismo efecto.

Colección de caracteres:

Una colección de caracteres es una expresión que comienza con [ y termina con ]. Este tipo de expresión concuerda con cualquier carácter que esté incluido dentro de la colección.

Este tipo de expresiones pueden contener cualquier combinación de lo siguiente:

Caracteres:

Por ejemplo: [abc] concordará con cualquiera de los caracteres 'a', 'b', ó 'c'.

Rango de caracteres:

Por ejemplo: [a-c] concordará con cualquier carácter en el rango 'a' a 'c'.

Negación:

Si una expresión encerrada por corchetes comienza con el carácter ^, entonces concordará con el complemento de los caracteres que contiene. Por ejemplo: [^a-c] concordará con cualquier carácter que no esté en el rango a-c.

Clases de caracteres:

Una expresión de la forma [[:nombre:]] concuerda con la clase de carácter cuyo nombre es "nombre". Por ejemplo: [[:lower:]] concuerda con cualquier carácter en minúsculas. Vea las clases de caracteres que son admitidos.

Símbolos:

Mediante la expresión [[.nombre.]] se puede especificar determinados tipos de caracteres cuyo nombre es "nombre". Por ejemplo, con la expresión [[.NUL.]] se especificaría el carácter nulo. Vea los nombres simbólicos que son admitidos.

Clases de equivalencia:

Una expresión de la forma [[=caracter=]] concuerda con cualquiera de las formas equivalentes del carácter indicado, como por ejemplo las mayúsculas/minúsculas, la tilde o cualquier otra forma específica del idioma. Así, por ejemplo [[=a=]] concuerda con los caracteres: a, à, á, â, ã, ä, å, A, À, Á, Â, Ã, Ä y Å.

Combinaciones:

Todas las formas comentadas anteriormente pueden ser combinadas en una expresión más compleja, por ejemplo: [[:digit:]a-c[.NUL.]].

Secuencias de escape

Cualquier carácter especial precedido por la barra vertical \ concordará consigo mismo. Si por ejemplo se desea utilizar el asterisco como carácter literal y no como operador dentro de la expresión, sería necesario utilizar \*.

Las siguientes secuencias son también soportadas:

Caracteres específicos

Las siguientes secuencias de escape son sinónimos para determinados caracteres:

Escape

Carácter

\a

Timbre (0x07).

\e

Carácter de ESC (0x1B).

\f

Salto de página.

\n

Salto de línea.

\r

Retorno de carro.

\t

Tabulador horizontal.

\v

Tabulador vertical.

\cX

Un carácter ASCII, cuyo código es X % 32.

\xdd

Un carácter ASCII especificado en hexadecimal, cuyo código será 0xdd.

\x{dddd}

Un carácter UNICODE especificado en hexadecimal, cuyo código es 0xdddd.

\0ddd

Un carácter ASCII especificado en octal, cuyo código es 0ddd.

\N{nombre}

Un carácter que coincide con el nombre simbólico "nombre". Por ejemplo: \N{newline} indicará el carácter de salto de línea y por lo tanto sería equivalente a \n.

Clases de caracteres:

Hay determinadas clases de caracteres que tienen su equivalente como una secuencia de escape.

Carácter de escape

Equivalente a

\d

[[:digit:]]

\l

[[:lower:]]

\s

[[:space:]]

\u

[[:upper:]]

\w

[[:word:]]

\D

[^[:digit:]]

\L

[^[:lower:]]

\S

[^[:space:]]

\U

[^[:upper:]]

\W

[^[:word:]]

Propiedades de caracteres

Los nombres de propiedades de la siguiente tabla son equivalentes a los nombres utilizados en las clases de caracteres:

Forma

Descripción

Equivalente a

\pX

Indica cualquier carácter que tiene la propiedad X.

[[:X:]]

\p{Nombre}

Indica cualquier carácter que tiene la propiedad "Nombre".

[[:Nombre:]]

\PX

Indica cualquier carácter que no tiene la propiedad X.

[^[:X:]]

\P{Nombre}

Indica cualquier carácter que no tiene la propiedad "Nombre".

[^[:Nombre:]]

Demarcación de palabras

Las siguientes secuencias de escape indican demarcación de palabras:

\<

Concuerda con el inicio de una palabra.

\>

Concuerda con el final de una palabra.

\b

Concuerda con el inicio y el final de una palabra.

\B

Concuerda sólo cuando no se está en el inicio o el final de una palabra.

Secuencia de literales

La secuencia de escape \Q comienza una secuencia de literales, es decir, todos los caracteres que vengan después serán tratados como literales, hasta que se alcanza el final de la expresión o se especifica la secuencia de escape \E. Por ejemplo, la expresión: \Q\*+\Ea+ concuerda con alguna de las siguientes cadenas:

\*+a
\*+aaa

Cualquier otra secuencia de escape

Cualquier otra secuencia de escape concordará con el carácter indicado. Por ejemplo \@ concordará con el literal '@'.

Extensiones

Todas las extensiones comienzan con (? y finalizan con ).

Comentarios

(?# ... ) es tratado como un comentario, y por lo tanto su contenido será ignorado.

Agrupaciones sin generar sub-expresiones

Una expresión de la forma (?:patrón) permite agrupar patrones sin generar una nueva sub-expresión.

Mirar hacia adelante

(?=patrón) consume cero caracteres sólo si el patrón concuerda.

(?!patrón) consume cero caracteres sólo si el patrón no concuerda.

Este tipo de expresión es utilizada normalmente para crear un AND lógico de dos expresiones regulares, por ejemplo si una contraseña debe contener una letra en minúscula, una letra en mayúscula, un símbolo de puntuación, y debe tener al menos 6 caracteres, entonces la expresión:

(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}

puede ser utilizada para validar la contraseña.

Mirar hacia atrás

(?<=patrón) consume cero caracteres sólo si el patrón puede tener concordancia con los caracteres que preceden a la posición actual (el patrón debe ser de longitud fija).

(?<!patrón) consume cero caracteres sólo si el patrón no puede tener concordancia con los caracteres que preceden a la posición actual (el patrón debe ser de longitud fija).

Expresiones condicionales

Una expresión de la forma (?(condición)patrón-sí|patrón-no) intenta concordar patrón-sí si la condición es verdadera, en otro caso intentará concordar la expresión patrón-no.

Una expresión de la forma (?(condición)patrón-sí) intenta concordar patrón-sí si la condición es verdadera, en otro caso falla.

La condición puede ser una aserción hacía adelante, o el índice de una sub-expresión (la condición será verdadera si la sub-expresión ha tenido concordancia).

Precedencia de los operadores

El orden de precedencia (de mayor a menor) para los operadores es el mostrado en la siguiente tabla:

Símbolos, clases de caracteres, y clases de equivalencia

[==] [::] [..]

Secuencias de escape

\

Colección de caracteres

[]

Agrupación

()

Repetición

* + ? {m,n}

Concatenación

 

Inicio y final de línea

^$

Alternación

|

Nombres de clases


Nombre

Descripción

alnum

Cualquier carácter alfanumérico.

alpha

Cualquier carácter alfabético.

blank

Cualquier espacio en blanco.

cntrl

Cualquier carácter de control.

d

Cualquier dígito decimal.

digit

Cualquier dígito decimal.

graph

Cualquier carácter gráfico.

l

Cualquier carácter en minúsculas.

lower

Cualquier carácter en minúsculas.

print

Cualquier carácter imprimible.

punct

Cualquier carácter de puntuación.

s

Cualquier espacio en blanco.

space

Cualquier espacio en blanco.

unicode

Cualquier carácter extendido cuyo código está por encima de 255.

u

Cualquier carácter en mayúsculas.

upper

Cualquier carácter en mayúsculas.

w

Cualquier carácter perteneciente a una palabra (caracteres alfanuméricos y el carácter de subrayado).

word

Cualquier carácter perteneciente a una palabra (caracteres alfanuméricos y el carácter de subrayado).

xdigit

Cualquier carácter en hexadecimal.


Nombres de símbolos

 

Nombre

Carácter

NUL

\x00

SOH

\x01

STX

\x02

ETX

\x03

EOT

\x04

ENQ

\x05

ACK

\x06

alert

\x07

backspace

\x08

tab

\t

newline

\n

vertical-tab

\v

form-feed

\f

carriage-return

\r

SO

\xE

SI

\xF

DLE

\x10

DC1

\x11

DC2

\x12

DC3

\x13

DC4

\x14

NAK

\x15

SYN

\x16

ETB

\x17

CAN

\x18

EM

\x19

SUB

\x1A

ESC

\x1B

IS4

\x1C

IS3

\x1D

IS2

\x1E

IS1

\x1F

space

\x20

exclamation-mark

!

quotation-mark

"

number-sign

#

dollar-sign

$

percent-sign

%

ampersand

&

apostrophe

'

left-parenthesis

(

right-parenthesis

)

asterisk

*

plus-sign

+

comma

,

hyphen

-

period

.

slash

/

zero

0

one

1

two

2

three

3

four

4

five

5

six

6

seven

7

eight

8

nine

9

colon

:

semicolon

;

less-than-sign

<

equals-sign

=

greater-than-sign

>

question-mark

?

commercial-at

@

left-square-bracket

[

backslash

\

right-square-bracket

]

circumflex

~

underscore

_

grave-accent

`

left-curly-bracket

{

vertical-line

|

right-curly-bracket

}

tilde

~

DEL

\x7F