Las expresiones regulares se vuelven poderosas cuando dominas las clases de caracteres, sus negaciones y los atajos como \d, \w y \s. Aquí verás cómo encontrar dígitos, definir rangos, construir “anti clases” con el gorrito (^ dentro de una clase) y usar el cuantificador ? para separar grupos, por ejemplo, en teléfonos, sin añadir complejidad innecesaria.
¿Cómo funcionan las clases y atajos en expresiones regulares?
Entender las clases te permite buscar exactamente lo que necesitas. Puedes definir rangos y aprovechar shortcuts que aceleran la escritura y reducen errores.
¿Qué hacen los atajos para dígitos, palabras y espacios?
\d: encuentra cualquier dígito del cero al nueve. Hace tantos matches como dígitos haya en el texto.
\D: encuentra todo lo que no es un dígito. Útil para separar bloques numéricos.
\w: encuentra números, letras y guiones bajos. No incluye espacios, puntos, dos puntos ni slashes.
\W: encuentra todo lo que no pertenece a \w.
\S: encuentra todo lo que no es espacio. Ideal para “caracter que se vea”.
¿Cómo definir rangos dentro de clases?
Rango numérico con clase: coincide con un solo caracter en el rango.
[0-9] # cualquier dígito
[0-4] # dígito entre 0 y 4
[A-Z] # letra mayúscula
[A-C] # A, B o C
Puedes combinar rangos en la misma clase.
[0-5A-C]
¿Cómo negar clases y crear anti clases?
La negación tiene dos vías: usar la versión en mayúscula de un atajo (por ejemplo, \D) o usar el gorrito dentro de una clase para excluir lo que enumeras.
¿Cómo usar el gorrito dentro de la clase?
Coloca ^ al inicio de la clase para negar su contenido.
[^0-5A-C]
Esto coincide con todo lo que no sea 0–5 ni A–C. Es equivalente a decir 6–9 y D–Z, e incluso puedes excluir también el espacio si lo necesitas.
¿Qué utilidad práctica tienen estas negaciones?
Construir “anti clases” para filtrar lo que no quieres incluir.
Encontrar separadores que no sean dígitos entre bloques numéricos.
Evitar seleccionar espacios cuando busques caracteres “visibles”.
¿Cómo aplicar negaciones y cuantificadores para patrones tipo teléfono?
Cuando quieres capturar secuencias numéricas separadas por “algo que no es dígito”, la negación con \D y el cuantificador ? simplifican el patrón. Se describió el caso de seis dígitos, permitiendo un separador opcional.
¿Cómo se vería el patrón paso a paso?
Dos dígitos, un no dígito, dos dígitos, un no dígito opcional, dos dígitos.
\d\d\D\d\d\D?\d\d
Explicación breve.
\d: un dígito.
\D: un caracter que no es dígito.
?: “cero o uno”. Permite que el último separador pueda o no estar.
¿Qué limitaciones debo considerar?
Como \D acepta “cualquier cosa que no sea dígito”, también haría match si el separador fuera una letra, por ejemplo “Y” o “R”. Es poco común, pero posible.
¿Qué sigue con líneas completas y CSV?
Además de buscar matches dentro del texto, se adelantó que podrás “anclar” el patrón para que coincida con líneas completas. Esto es útil con CSV: indicar que una línea empiece y termine según tu forma. Se verá un caracter que se repite con otro significado y quedará tan claro como el símbolo de interrogación.
Habilidades reforzadas.
Construcción de clases y rangos en regex.
Uso de atajos y sus negaciones: \d/\D, \w/\W, \S.
Negación de clases con el gorrito ^.
Control de opcionalidad con ?.
Diseño de patrones prácticos para números y separadores.
¿Te gustaría que probemos tu patrón con separadores específicos o que lo adaptemos a un formato de CSV concreto? Comparte un ejemplo y lo ajustamos juntos.
\t — Representa un tabulador. \r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar. \n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r. \a — Representa una “campana” o “beep” que se produce al imprimir este carácter. \e — Representa la tecla “Esc” o “Escape” \f — Representa un salto de página \v — Representa un tabulador vertical \x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9”. \u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2” representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo. \d — Representa un dígito del 0 al 9. \w — Representa cualquier carácter alfanumérico. \s — Representa un espacio en blanco. \D — Representa cualquier carácter que no sea un dígito del 0 al 9. \W — Representa cualquier carácter no alfanumérico. \S — Representa cualquier carácter que no sea un espacio en blanco. \A — Representa el inicio de la cadena. No un carácter sino una posición. \Z — Representa el final de la cadena. No un carácter sino una posición. \b — Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena. \B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.
Gracias!! no me funcionaba el ejercicio anterior, y me diste la respuesta!!! 😃
Que buen aporte..
En SQL, si nos piden que hagamos la consulta (utilizando expresiones regulares) de una columna de una X estación, donde nos piden nombres que no empiecen en “aeiou” la consulta se podría realizar de la siguiente manera:
SELECT columna
FROM nombre_tabla
WHERE columna REGEXP'^[^aeiou]';
Interesante
Que bien lo aplicaste en SQL!
Aclarar que el “gorrito” (^) solo funciona como negación cuando está dentro de los corchetes [ ] estando a fuera significa otra cosa jeje en dos vídeos siguiente nos damos cuenta
Gracias we, ahora escribo en mis notas bien como se usa el “gorrito” antes de que tenga que tacharlo xd
Gracias, viajero del futuro
¿Y los peligros? Ah... es que no hay peligros. Que ingenioso...
jajajajaja
Una breve lista de los más utilizados:
// ^ Indica el principio de una cadena// $ Indica el final de una cadena// () Un agrupamiento de parte de una expresión// [] Un conjunto de caracteres de la expresión// {} Indica un número o intervalo de longitud de la expresión// . Cualquier caracter salvo el salto de línea// ? 0-1 ocurrencias de la expresión// + 1-n ocurrencias de la expresión// * 0-n ocurrencias de la expresión// \ Para escribir un caracter especial como los anteriores y que sea tratado como un literal// | Para indicar una disyunción lógica (para elegir entre dos valores: a|b se tiene que cumplir al menos uno de los dos)
Muy buen aporte.
Not (^), su uso y sus peligros
\D -> Encuentra todo lo que no sea un dígito
\S -> Encuentra todo lo que no sea un espacio
\W -> Encuentra todo lo que no sea una palabra
^ -> Sirve para negar SOLAMENTE dentro los corchetes. Por ejemplo: [^0-5a-c] significa que tomará del 6 al 9 y de la 'd' a la 'z'
Otros caracteres
\t — Representa un tabulador.
\r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
\n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r.
\a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
\e — Representa la tecla “Esc” o “Escape”
\f — Representa un salto de página
\v — Representa un tabulador vertical
\x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9”.
\u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2” representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
\d — Representa un dígito del 0 al 9.
\w — Representa cualquier carácter alfanumérico.
\s — Representa un espacio en blanco.
\D — Representa cualquier carácter que no sea un dígito del 0 al 9.
\W — Representa cualquier carácter no alfanumérico.
\S — Representa cualquier carácter que no sea un espacio en blanco.
\A — Representa el inicio de la cadena. No un carácter sino una posición.
\Z — Representa el final de la cadena. No un carácter sino una posición.
\b — Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena.
\B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.
Excelente aporte, muchas gracias.
^ se llama acento circunflejo
ALT + 94 = Acento circunflejo (gorrito) ^
Tambien se puede hacer con AltGr y ^ y despues un espacio
en teclado ingles lo tengo como shift + 6
El signo ^ es llamado: Acento circunflejo
Este solo sirve como negación si se encuentra dentro de un [ ]
\S: Va a encontrar todo lo que NO sea carácter visible
\W: Me va a encontrar todo lo que no sea alfanumérico
\D: Me va a encontrar todo lo que no sea un dígito
🙌 “Gorrito” 🙌
Recomiendo esta lectura ReDoS ya que debemos tener cuidado al diseñar una expreción regular para evitar este tipo de vulnerabilidades.
Que buen aporte, muchas gracias!
Para que solo haga match los teléfonos con cualquier caracter especial excluyendo las letras podría ser de la forma
\d\d\W?\d\d\W?\d\d
muchas gracias amigo muy bueno.
Muy buena solucion
[^0-5a-c ]
Este caracter nos permite negar una clase o construir “anticlases”, vamos a llamarlo así, que es: toda la serie de caracteres que no queremos que entren en nuestro resultado de búsqueda.Para esto definimos una clase, por ejemplo:[0-9], y la negamos [^0-9] para buscar todos los caracteres que coincidan con cualquier caracter que no sea 0,1,2,3,4,5,6,7,8 ó 9
Yo lo conozco como "caret", está correcto también? Ojalá que sí porque se me hace más fácil de memorizar que "Acento circunflejo" xD
Sí, realmente puedes decirle coo quieras, como por ejemplo este símbolo: "~" que algunos les dicen colita de chancho que en realidad se llama "virgulilla" jaja
^ se llama "acento circunflejo".
Teclear únicamente Caret en VSC hace que encuentre el inicio de cada línea en el documento. Saben por qué pasa esto? Me parece muy random jajaj y quiero entender
Porque el caret fuera de una clase, es decir, fuera de [ ], significa el comienzo de una linea
No me lo estaba tomando literal @danielms07 jajajaja. Gracias!
cual es el ascci del ^
Alt +94 = ^
En linux se hace de la siguiente manera: primero presionas las teclas ctrl+shift+u, esto hará que nos aparezca en la parte donde estemos tecleando una u subrayada, luego introducimos el código 5e, y listo ya tenemos el símbolo en cuestión.
Los usuarios de #Linux podemos utilizar los caracteres del código ASCII de la forma: ctrl + shift+ u y sin soltar ctrl + shift escribir el código pero en Hexadecimal