martes, 28 de junio de 2016

? - Encuentra un elemento cero o una vez

Este cuantificador significa, en la práctica, "Haz el elemento precedente opcional." Digamos que queremos comprobar la validez de un número de teléfono y consideramos que un número de teléfono es válido si encaja en alguna de estas dos formas:

(nnn) nnn-nnnn
nnn nnn-nnnn

donde "n" es un número. Podríamos construir una expresión regular como esta:

^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$

En esta expresión escribimos, después de los caracteres de los paréntesis, signos de interrogación para indicar que tienen que ser comprobados cero o una vez. De nuevo, como los paréntesis son normalmente metacaracteres (en ERE), los precedemos con barras invertidas para hacer que sean tratados como literales.

Probémoslo:

[me@linuxbox ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
(555) 123-4567
[me@linuxbox ~]$ echo "555 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
555 123-4567
[me@linuxbox ~]$ echo "AAA 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'
[me@linuxbox ~]$

Aquí vemos que la expresión encuentra ambos formatos del número de teléfono, pero no encuentra ninguno que contenga caracteres no numéricos.

No hay comentarios:

Publicar un comentario