PDF de programación - Regular Expressions

<<>>
Imágen de pdf Regular Expressions

Regular Expressionsgráfica de visualizaciones

Publicado el 22 de Junio del 2019
1.018 visualizaciones desde el 22 de Junio del 2019
240,4 KB
34 paginas
Regular Expressions

s/\(Regular\).*/Expresiones \1es/

Definición

Una expresión regular, también llamada

regex o regexp, es una secuencia de

caracteres que forma un patrón de

búsqueda, principalmente utilizada para

la búsqueda de patrones de cadenas de

caracteres u operaciones de sustituciones

Historia

Las regex fueron creadas
en 1956 por el matemático
Stephen Kleene, quien entre
otras cosas también es uno
de los padres de la teoría
de las funciones
recursivas

Regex en Unix

Las regex se volvieron
populares en 1968 gracias
a Ken Thompson, quién las
implementó en el editor ed
y más tarde (1973) en grep

Ken Thompson

Creador, junto con
Dennis Ritchie, de UNIX
(1969), creador del
lenguaje B (precursor
del C). Co-creador de la
codificación UTF-8.
Actualmente
desarrollando el
lenguaje Go

g/re/p

globally search a regular expression and print

grep es una herramienta de línea de comandos que

imprime todas aquellas líneas de un archivo de
texto que matcheen contra una expresion regular

Así se ve una regex

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+

(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Las regex usan metacaracteres

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

POSIX standard

El estándar POSIX posee tres tipos de
expresiones regulares

● BRE - Basic Regular Expressions
● ERE - Extended Regular Expressions
● SRE - Simple Regular Expressions(*)

(*) Deprecated

Qué es POSIX ?

POSIX es el acrónimo de

"Portable Operating System Interface for UNIX"

POSIX es una familia de estándares

para mantener compatibilidad

entre distintas variantes de UNIX.

Basic Regular Expression Vs.
Extended Regular Expressions

La diferencia principal entre BRE y ERE

es la cantidad de

metacaracteres detectados

Metacaracteres en BRE

\ ^ $ . [ ] *

Metacaracteres en BRE

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

Metacaracteres en ERE

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

Estructura de una
regex de sustitución

s/pattern/replace/[modifiers]

Punto

El . indica cualquier caracter
menos fin de línea

s/./x/g

Cómo matchear el punto?

Rangos

Con [] puedo definir rangos de
caracteres y especificar mi búsqueda

:%s/[abc]/x/g

Ejemplos de rangos

[0-9]
[0-9a-zA-Z]
[^abc]

caracteres del 0 al 9
números + letras
cualquier cosa menos a, b y c

Clases de caracteres

Los rangos más
comunes tienen una
forma más corta de
escritura

\d [0-9]
\D [^\d]
\w [A-Za-z0-9_]
\W [^\w]
\s [ \t\r\n]
\S [^\s]

Contadores

0 o más ocurrencias
1 o más ocurrencias

*
\+
\? 0 o 1 ocurrencia

Contadores

$ echo "ala olla pollo polo" | sed 's/l*//g'
aa oa poo poo

$ echo "ala olla pollo polo" | sed 's/ol\?/_/g'
ala _la p_l_ p__

$ echo "alaa olla pollo polo" | sed 's/a\+/a/g'
ala olla pollo polo

Contadores

$ find assets -regex ".*[0-9]+.png"
assets/admin/v3/js/select2/select2.png
assets/admin/v3/js/select2/select2x2.png
assets/admin/images/coquelux2.png
assets/images/tarjetas/8d1860cb15f3b57d5456bd83309a0a79.png
assets/images/v2/tabla_talles/Talles-Ropa_10.png
assets/admin/images/admin/ventas/35.png
assets/admin/images/admin/ventas/0.png

Más contadores

\{n,m}
\{n}
\{,m}
\{n,}

matchea de n a m ocurrencias
matchea n ocurrencias
matchea hasta m ocurrencias (de 0 a m)
matchea al menos n ocurrencias

Más contadores

$ grep --color '10\{2,3\}' /etc/group
users:x:100:
it:x:1000:
xleo:x:1001:
wireshark:x:1002:xleo

Más contadores

$ grep '2014:1[1-3]:[0-9]\{2\}' access.log
127.0.0.1 - - [16/Dec/2014:11:53:02 -0300] "GET …
...
127.0.0.1 - - [16/Dec/2014:12:16:39 -0300] "GET ...

Extremos

^
$

Inicio de la línea
Final de la línea

Extremos ^

$ ls -l /usr/local/ | grep ^d
drwxr-xr-x 2 root root 4096 oct 22 06:25 bin
drwxr-xr-x 2 root root 4096 oct 17 2012 etc
drwxr-xr-x 5 root root 4096 nov 7 00:09 lib
drwxr-xr-x 2 root root 4096 oct 17 2012 sbin
drwxr-xr-x 7 root root 4096 sep 30 13:14 share
drwxr-xr-x 2 root root 4096 oct 17 2012 src

Extremos $

1 mi··¬
2 editor y yo····¬
3 ···¬
4 dejamos espacios·¬
5 donde no corresponde¬
6 ···¬

:%s/ \+$//

Group & Back reference

$ printf "%s\n" \
"I love cats" "I love dogs" "I love rabbits" \
| sed 's/love \(cats\|dogs\)/hate \1/'
I hate cats
I hate dogs
I love rabbits

Group & Back reference

$ echo -e "Juan Manuel Alsina\nCarlos Ramirez" \
| sed 's/^\(.*\) \(\w*\)$/\2, \1/'
Alsina, Juan Manuel
Ramirez, Carlos

Links

● http://xkcd.com/208/
● http://www.regular-expressions.info/
● http://www.regexr.com/

Gracias!
  • Links de descarga
http://lwp-l.com/pdf16167

Comentarios de: Regular Expressions (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad