Expresiones regulares (con ejemplos) - 1

"Y ahora te contaré sobre las expresiones regulares. Este tema es complejo y simple al mismo tiempo. Para comprender a fondo las expresiones regulares, es posible que necesites leer dos o tres libros importantes, pero puedo enseñarte cómo usarlos". ahora mismo."

"Como a los programadores experimentados les gusta bromear, si tienes un problema y crees que lo vas a resolver con expresiones regulares, ahora tienes dos problemas".

"Mmm."

"Espero no haberte asustado demasiado, amigo mío. ¿No?"

"Está bien, bien. Entonces, nuestro nuevo tema son las expresiones regulares".

"Si las simplificamos demasiado, las expresiones regulares son patrones para cadenas".

"Puede verificar si una cadena coincide con un patrón dado. También puede dividir una cadena en partes usando un delimitador o un patrón".

"Pero empecemos con algo simple: ¿ qué es un patrón? "

"En SQL (pero no en Java), puede verificar si una cadena coincide con un patrón en particular. Así es como se ve:"

name like 'Alex%'

Aquí el nombre es una variable, como un comando para verificar un patrón, y "Alex%" es el patrón.

En este caso, % significa cualquier cadena o subcadena.

Patrón Cuerdas que coinciden con el patrón
'Alex%' Alex
Alex andr
Alex ander
Alex andra
….
'%X%' Ma x
Ma x soy
Ale x andr
'%a' Olg a
Helen a
Ir a

"En SQL, si necesita especificar que solo debe haber otro carácter, entonces usaría el carácter de subrayado: "_"."

Patrón Cuerdas que coinciden con el patrón
'Alex%_' Alex
Alex andr
Alex ander
Alex andra
….
'_X' Hacha
Bx
Cx
'___' Aaa
Aab
Bbb

"Eso tiene sentido."

"Está bien, entonces pasemos a las expresiones regulares".

"Las expresiones regulares generalmente incluyen restricciones no solo en la cantidad de caracteres, sino también en su 'contenido'. "Cualquier máscara generalmente consta de dos (a veces más) partes: la primera describe las 'preferencias' de caracteres y la segunda describe la cantidad de caracteres ."

"Aquí hay algunos ejemplos de contenido :"

Patrón Descripción Ejemplos
. Cualquier personaje 1
\d Cualquier digito 7
\D Cualquier no dígito C
\s Un carácter de espacio, salto de línea o tabulación ' '
\S Cualquier cosa excepto espacios, tabulaciones y saltos de línea F
[Arizona] Cualquier letra de la a a la z z
[0-9] Cualquier dígito del 0 al 9. 8
\w Cualquier carácter de palabra C
\W Cualquier carácter que no sea una palabra _

"No los recordaré de inmediato, pero no parece demasiado difícil".

"Excelente, entonces aquí hay ejemplos de la cantidad de caracteres en una máscara: "

Patrón Descripción Ejemplos
¿A? El carácter 'A' aparece una vez o no aparece en absoluto A
B+ El carácter 'B' aparece una o más veces BBBBB
C* El carácter 'C' aparece cero o más veces CCC
D{n} El caracter 'D' aparece n veces El patrón D{4} coincide con DDDD
E{n,} El carácter 'E' aparece n o más veces El patrón E{2,} coincide con EEEEEEE
F{n, m} El caracter 'F' ocurre entre n y m veces El patrón E{2,4} coincide con EEEE

"Todo eso parece bastante sencillo".

"Te estás dando cuenta de todo tan rápido. Ahora veamos cómo se ve todo junto:"

Patrón Descripción Ejemplos
[anuncio]? Un carácter entre 'a' y 'd' aparece una vez o nunca a B C D
[bd,z]+ Los caracteres 'b', 'c', 'd' o 'z' aparecen una o más veces b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* Los dígitos 1, 7, 8 o 9 aparecen cero o más veces 1, 7, 9, 9777, 111199
1{5} El dígito 1 ocurre 5 veces 11111
[1,2,a,b]{2} Los símbolos 1, 2, 'a' o 'b' aparecen dos veces 11, 12, 1a, ab, 2b, cama y desayuno, 22
[a,0]{2,3} Los símbolos 'a' o 0 aparecen 2 o 3 veces automóvil club británico, a0,00,0a, aaa,000, a00,0a0, a0a

"Todavía todo despejado".

"¿En serio? Hmm. O te expliqué todo muy bien o eres demasiado rápido en la captación. Bueno, de cualquier manera, eso es bueno para nosotros".

"Aquí hay un par de ideas nuevas para usted".

"Dado que las expresiones regulares se usan a menudo para encontrar subcadenas, podemos agregar dos caracteres más (^ y $) a nuestros patrones".

"^ significa que la subcadena debe incluir el comienzo de la cadena".

"$ significa que la subcadena debe incluir el final de la cadena".

"Aquí hay unos ejemplos:"

Patrón Cadena y subcadenas que coinciden con el patrón
un{3} aaa  a  aaa  a  aaa
un{3}$ aaa a aaa a  aaa
^a{3} aaa  a aaa a aaa
^a{3}$ aaa a aaa a aaa

"Y un punto más importante".

"En las expresiones regulares, los siguientes caracteres tienen un significado especial: [ ] \ / ^ $ . | ? * + ( ) { }. Se llaman caracteres de control. Por lo tanto, no puede simplemente usarlos en cadenas".

"Al igual que en el código Java, deben escaparse. "Y nuevamente, como en el código Java, el carácter '\' se usa para esto".

"Si queremos describir una cadena que consta de tres '?' caracteres, no podemos escribir '?{3}', porque '?' es un carácter de control. Tenemos que hacerlo así: \?{3}. Si queremos usar un carácter '\', entonces tenemos que escribir '\\'".

"Ok lo tengo."

"Y ahora aquí hay otro dato interesante. En los archivos con código Java, el carácter '\' también debe escaparse en las cadenas, ya que es un carácter de control".

"Por supuesto."

"Entonces, si está tratando de definir una expresión regular de Java en una cadena, entonces necesita escapar del carácter '\' dos veces".

"Aquí hay un ejemplo:"

Quiero una máscara que coincida con 'c:\cualquier cosa'
En teoría, la expresión regular debería verse así:
un carácter 'c',
dos puntos,
barra invertida,
punto y asterisco (para indicar cualquier número de caracteres). Agregué espacios para mejorar la legibilidad:
c : \ .*
Pero los caracteres '\' y '.' debe escaparse, por lo que la expresión regular se verá así:
c :   \\ \. *
O, sin espacios
c: \\ \. *
"Deberíamos tener tres barras invertidas en nuestra expresión regular.
Eso significa que en un archivo Java, la expresión regular se verá así:"
String regexp = "c: \\\\ \\. *";

"¡Guau! Vaya. Ahora lo sé".

"Y si decide profundizar en esto, aquí hay un par de buenos enlaces:"

Lección en Wikipedia