Alternativas
Una alternativa es el equivalente a un O lógico. El simbolo de la alternativa es | como veíamos anteriormente.
Por ejemplo /(http|ftp)/ especifica "http o ftp".
Imaginemos que queremos un expresión que verifique una línea que termina en un nombre de fichero ejecutable dos/win32. Los ejcutables los vamos a limitar a .bat, .exe y .com, con lo que quedaría:
/.*(\.bat|\.exe|\.com)$/ |
con lo que estamos especificando una línea que termina en .bat, .exe o .com.
Ejemplos
Expresión regular |
Significado |
/^En un.*/ |
Una línea que comienza por "En un". |
/^En un.*apache$/ |
Una línea que comienza por "En un" y termina en "apache". |
/^En un.*[Aa]pache$/ |
Una línea que comienza por "En un" y termina en "apache" o "Apache". |
/^(http|ftp):\/\/.*\.com\/$/ |
Una línea que comienza por "http" o "ftp" y termina en ".com/". (Ver alternativas). |
/<td[^>]*>/ |
Cumple "<td lo quesea>" |
/[ ][ ]*/ |
Cualquier secuencia de espacios en blanco |
/[ ]+/ |
Cualquier secuencia de espacios en blanco. Igual que la anterior. |
/^[^#]*$/ |
Especifica una línea que NO comience por el carácter "#". |
/^[^#]*tty$/ |
Especifica una línea que NO comience por el carácter "#" y termine en "tty". |
Expresión |
Significado |
/^Expresiones Regulares Pag\. 2$/ |
Es una expresión regular que indica una línea que es exactamente "Expresiones Regulares Pag. 2". Empieza y acaba en esa frase. |
/^[ ]*Expresiones Regulares Pag\. 2$/ |
Es una expresión regular que indica una línea que empieza por una serie de espacios en blanco y termina en "Expresiones Regulares Pag. 2" |
/^[:blank:]*Expresiones Regulares Pag\. 2$/ |
Equivalente a la anterior, pero además de espacio incluye tabuladores. |
/^\s*Expresiones Regulares Pag\. 2$/ |
Igual que el anterior |
/^Expresiones[ ]* Regulares Pag\. 2$/ |
Especifica una línea que empieza por "Expresiones" después una serie de espacios en blanco y termina en "Regulares Pag. 2". Observamos como en todas las expresiones regulares anteriores hemos puesto \., El signo "." tiene su significado propio, cualquier carácter por lo que si queremos incorporar el punto como tal tenemos que protegerlo con "\". |
Anclajes
Los puntos de anclaje, especifican una condición que se verifica en un punto particular del texto, sin corresponder a ningún carácter de la cadena de entrada concreta, esto es, una posción en el texto:
Metacarácter |
Significado |
^ |
Concuerda con el principio de línea |
$ |
Concuerda con el final de línea |
< > |
Concuerda con una palabra |
\b |
limites de palabra |
\B |
no sean limites de palabra |
\A |
inicio de la cadena de entrada (independiente del modo multilínea) |
\Z |
fin de la cadena de entrada o nueva línea delante del final |
\z |
fin de la cadena de entrada (independiente de modo multilínea) |
Cuantificadores
Los cuantificadores son metacaracteres de la expresiones regulares que indican las características de repetición de caracteres o grupos. Ya hemos visto en el ejemplo
/To:[ ]*[^@]+@midominio\.dom$/ |
como nos interesaba un expresión que después de To: pudiera haber cualquier serie de espacios en blanco, incluido ninguno, y a continuación de los espacios una serie de caracteres salvo "@". Todas estas repeticiones las podremos expresar mediante los cuantificadores que describimos a continuación:
Metacarácter |
Concuerda con |
* |
repetición de 0 o más veces el carácter o subexpresión previos |
+ |
repetición de 1 o más veces el carácter o subexpresión previos |
? |
repetición de 0 o una vez el carácter o subexpresión previos |
{n} |
repetición de n veces el carácter o subexpresión previos |
{n,} |
repetición de n veces el carácter o subexpresión previos |
{n,m} |
repetición entre n y m veces el carácter o subexpresión previos |
Para aclararnos un poco:
"*" equivale a "{0,}"
"+" equivale a "{1,}"
"?" equivale a "{0,1}"
Un cuantificador hace que la concordancia sea siempre con el mayor numero de veces posibles. Si queremos que sea con el menor posible le añadimos un "?".
Literales
Cualquier otro carácter especificado en unaexpesión regular se representa a sí mismo. Por ejemplo, la expresión regular:
/To:[ ]*[^@]+@midominio\.dom$/ |
consta de:
dos literales :to: y @midominio.dom (el "." va protegido).
un anclaje, el $ que indica final de línea
dos conjuntos de caracteres [ ] que representa un espacio en blanco y [^@] que indica todo lo que no sea @.
los cuantificadores * que indica en este caso posibles espacios en blanco y + que indica repetición de una o más veces el carácter anteriorior, en este caso todo lo que no sea @. Los metacaracteres * y + se analizan con más detalles en su apartado específico.
Metacarácter como literal
Cuando queramos utilzar un metacarácter como literal tendremos que protegerlo con una contrabarra ("\"). Ya hemos visto varios ejemplos, como el caso de /midominio\.dom/. En este caso el carácter "." no tiene su valor propio de una expresión regular de ser cualquier carácter, sino que al ir protegido representa el .
Un caso particular lo podemos encontrar si usamos expresiones regulares dentro de una shell, por ejemplo un script de shell. En este caso deberíamos realizar en algunos casos una doble protección con la contrabarra, una para protegerlo en shell y otra para potegerlo en la expresión regular. Por ejemplo:
Si ponemos:
A="La variable \$A está definida" |
En realidad estamos almacenando, "La variable $A está definida". Evidentemente esta cadena como expresión regular no tiene el signo $ protegido.
Si quisiéramos almacenar "La variable \$A está definida" entonces deberíamos poner:
A="La variable \\\$A está definida" |