Domina los contadores en expresiones regulares para pasar de búsquedas generales a coincidencias precisas. Aquí verás cómo controlar repeticiones exactas con {m,n}, construir clases de separadores y validar formatos como teléfonos, manteniendo el patrón claro, flexible y escalable.
¿Cómo usar contadores {m,n} para controlar repeticiones?
Los contadores permiten especificar cuántas veces debe repetirse un patrón. La forma {m,n} define cota inferior y cota superior: mínimo m y máximo n. También puedes fijar un único valor repitiéndolo: {2,2} significa exactamente dos.
Exacto con dígitos: dos dígitos seguidos.
\d\d
Exacto con llaves: igual que arriba, pero explícito con contadores.
\d{2,2}
Rango mínimo a máximo: de dos a cinco dígitos.
\d{2,5}
Rango abierto superior: cuatro o más dígitos.
\d{4,}
El motor busca el match más grande dentro del rango permitido, por eso con {2,10} agrupa lo máximo posible antes de romper por un carácter no válido. Algunos lenguajes aceptan {2} como exacto; otros exigen {2,2}. Mantener {m,n} en ambos casos es seguro y claro.
¿Qué papel juegan \d, \w y las clases en la precisión?
Los atajos y las clases de caracteres brindan legibilidad y control. \d representa dígitos y \w representa caracteres de palabra (letras, números y guion bajo). Con contadores, impones longitud mínima y máxima.
Usuario de 4 a 10 caracteres de palabra.
\w{4,10}
Letras seguidas de longitud variable usando rango abierto.
\w{4,}
Para combinar separadores o símbolos, crea una clase de caracteres con corchetes. Recuerda que algunos símbolos son reservados y deben escaparse, como guion y punto.
Clase de separadores con guion, punto y espacio.
[\-\.]
Separador opcional con símbolo de interrogación.
[\-\.]?
El símbolo de interrogación ? indica “cero o una vez”. Su equivalente con contador es {0,1}, útil cuando prefieres explicitar la cuenta tras una clase o patrón.
¿Cómo funciona ? frente a {0,1}?
Ambos logran que un elemento sea opcional. Usa ? para brevedad sobre un carácter o clase, o {0,1} para reforzar la idea de conteo explícito sin cambiar el match.
¿Cómo validar teléfonos con separadores opcionales y caracteres reservados?
Se pueden capturar números en bloques de dos dígitos, repitiéndolos y permitiendo separadores opcionales. Así cubres entradas con guiones, puntos, espacios o sin separadores.
Dos dígitos con separador opcional, repetido tres veces (ejemplo didáctico para 6 dígitos):
\d{2}[\-\.]?\d{2}[\-\.]?\d{2}
Para 10 dígitos en parejas de dos, repite el patrón cinco veces. Cada bloque acepta “guion, punto o espacio” como separador, o ninguno si no aparece.
Puntos clave del patrón de teléfonos:
Escape de reservados: guion y punto se escriben como - y . en clases.
Separadores opcionales: añade ? tras la clase [-. ].
Entrada flexible: admite “123456”, “12-34-56”, “12.34.56” o “12 34 56”.
Búsqueda progresiva: el match toma la secuencia más larga válida sin incluir caracteres ajenos, como letras.
Si el dato trae formato, puedes removerlo en el lenguaje que uses (JavaScript, etc.) y validar con un patrón exclusivo de dígitos, por ejemplo exactamente 10:
\d{10,10}
¿Cómo ampliar o ajustar reglas sin romper el patrón?
Agrega nuevos separadores dentro de la misma clase.
Modifica la longitud cambiando los contadores {m,n}.
Sustituye ? por {0,1} si prefieres conteo explícito.
Con estas piezas, ya controlas: repeticiones exactas, rangos, rangos abiertos, clases personalizadas, escape de símbolos y opcionalidad. En la continuación se explora el uso de ? en modo lazy para controlar la avidez del match.
¿Te gustaría ver más ejemplos con otros formatos o validar entradas reales de usuarios? Cuéntame qué patrón necesitas y lo armamos juntos.
para un numero de telefono en el formato con puntos, guion o espacio use el siguiente:
((\d\d[ -.]?){4}\d\d)
wow increible
Antes de saber esto para limitar información en un formulario habría escrito muchísmo código jajajaja recorrer vector, verificar, etc.
La última expresión que utilizo el profe beco se puede simplificar encerrando la clase base en paréntesis y después escribiéndole al lado llaves indicando la cantidad de parejas de números que queremos encontrar, así:
(\d{2,2}[\-\.]?){3,3}
Good!
Que gran aporte. Gracias!
Contadores:
Aplicando a un carácter que lo preceda se puede colocar entre llaves de esta forma, para indicarle que busque la cantidad deseada de caracteres.
{Cota inferiror, Cota superior}
Ejemplo:
\d{0,2}: Esto buscara 0, 1, 2 dígitos
\d{2,2}: Esto buscara 2 dígitos
\d{2}: Esto buscara 2 dígitos
\d{2,}: Esto buscara 2 o más dígitos.
\d{2,4}: Esto buscara 2, 3, 4 dígitos.
Que buen aporte !!
Excelente explicación, muchas gracias!
\d{2,2}[\-\.]?\d{2,2}[\-\.]?\d{2,2}[\-\.]?
Gracias por el aporte!!
mi expresion regular para buscar numero argentinos:
+54 388 5377055 -> [+]?(\d{2,4}[ ]?){2,4}
Explicacion: pueden o no empesar por un caracter, en esta caso es el simbo mas(+),despues agrupame los digitos en 2 que es la minima cantidad y en 4 para la maxima cantidad y que se aplique lo que tenga en mi clase( [ ] ) osea un espacio vacio, pero pueden o no tener ese espacio en blanco, si lo tiene esta bien y sino esta bien tambien por eso pongo el signo ? despues de la clase y por ultimo que me agrupe los agrupamiento que hice, me explico, si tengo 4 agrupamiento de 2 digitos quiero los 4 agrupamiento formen un solo agrupamiento osea un solo match
Súper bien
En algunos lenguajes o editores se permite incluso que sean opcionales tanto la primero o la segunda cota:
{2}{2,2}{,2}{2,}
En los casos en los que no se indique la cota, se toma “cualquier cantidad” o “infinito” …
OJO: no es en todos los lenguajes … hay algunos que exigen siempre ambas cotas … y como dice @beco, sería lo más correcto indicar ambas.
Me queda una duda con respecto a tu aporte… ¿Cómo sería un ejemplo de este contador? { ,2} “¿de infinito a dos?” o “de cualquier número a dos”
{,2} Sería equivalente a {0,2}
Es buena la enseñanza pero debo decir que me cuesta entender a la primera, por suerte estos son videos, que las veos especialmente para este curso en particular, un minimo de dos veces para agarrar o interiorizar lo que se enseña. Hasta ahora nada que observar en la clse, todo bien!
Algunos Metacaracteres, o caracteres reservados en regex:
Que buen dato
Gracias por el aporte!
Las expresiones regulares buscan de izquierda a derecha, y los va a grupando de este modo, conforme vaya encontrando ocurrencias dependiendo de la expresión regular buscada.
Que buen aporte !!
Para no escribir la expresion 5 veces, podemos utilizar los contadores sobre toda la expresion
(\d{2,2}[\.\-]?){5}
Muy crack, gracias :)
6. Mis apuntes sobre: "Los delimitadores: +,*,? "
Resumen hasta hoy#p132:
\w - caracteres de palabras
\d - dígitos
\s - espacios/invisibles en blanco
[0-9] ~ \d
[0-9a-zA-Z_] ~ \w
* - greedy - todo cero o más veces
+ - uno o más
? - cero o uno, en otro contexto (Sean los menos posibles)
1. Ejemplo regex:
.*
-Explicación 1: Encuentra un caracteres y sigue seleccionando hasta el final de la linea.
'
'
2. Ejemplo regex:
\d+
-Explicación 2: Encuentra un dígito, luego 1 o más hasta que no haya.
'
'
**3. Ejemplo regex: **
\d*[a-z]
-Explicación 3: Encuentra y selecciona: Toda vez que se inicie o no con un dígito,
y siga y termine con una letra de la a a la z.
'
'
4. Ejemplo regex:
\d*[a-z][a-z]?
-Explicación 4: Encuentra y selecciona: Toda vez que haya o no un dígito, luego
haya una letra de la a a la z, y luego haya o no una letra.
'
'
5. Ejemplo regex:
\d*[a-z]?s\d*
-Explicación 5: Encuentra y selecciona: Cero o muchos dígitos, y cero o una letras de la
a a la z y una letra 's' y cero o muchos dígitos.
'
'
7. Mis apuntes sobre: "Los contadores {1,4}"
{1,2} -> Los contadores tienen una cota inferior y una superior, indicando el mínimo y máximo
de resultados que se quieren encontrar.
1. Ejemplo regex: Contadores
\d{2,2}
-Explicación 1: Encuentra y selecciona [match], mínimo dos y máximo 2 dígitos.
'
'
2. Ejemplo regex: Contadores 2
\d{2,10}
-Explicación 2: Encuentra y selecciona [match], mínimo dos y máximo 10 dígitos.
'
'
3. Ejemplo regex: Contadores sin límite
\d{4,}
-Explicación 3: Encuentra y selecciona [match], mínimo cuatro y máximo sin límite de dígitos.
'
'
4. Ejemplo regex: Contadores seguidos de más patrones
\d{2,2}-?\d{2,2}-?\d{2,2}-?\d{2,2}-?\d{2,2}
-Explicación 4: Encuentra y selecciona [match], mínimo 2 y máximo dos dígitos, seguidos
de cero o un guión, luego lo mismo cuatro veces, y finaliza con mínimo dos y máximo dos dígitos.
'
'
*4. Ejemplo regex: Combinando contadores
\d{2,2}[\-\.]?
-Explicación 4: Encuentra y selecciona [match], mínimo 2 y máximo dos dígitos, seguidos
de cero o un guión(-) o punto(.).
'
'
5. Ejemplo regex: Combinando contadores
\d{2,2}[\-\.]?\d{2,2}[\-\.]?\d{2,2}
-Explicación 5: Encuentra y selecciona [match], mínimo 2 y máximo dos dígitos, seguidos
de cero o un guión(-) o punto(.) o espacio en blanco ( ), tres veces lo mismo.
'
'
Esto fue una explicación "potente"!
tengo un problema con una parte de la demostracion... en mi VSCode... no selecciona lo que al profesor si. ¿Podria alguien decirme por que?
Veo que nadie te respondió pero acá esta la respuesta un año después.
Es porque el guión -, dos puntos ; y punto y coma ; no son considerados como caracteres especiales para VS code. Por ello, solo debes escapar los caracteres que si considere especiales:
Gracias por la solucion Rafael, tenia el mismo problema que Abraham y la verdad jamas imagine que en cada lenguaje de edicion como el VSCode, su declaracion es un poco diferente a lo explicado por el profe. Saludos
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// Los contadores {a,b} //////////////////////////////////////////////////////////////////////////////////////////////////////////////// Es un contador que indica de manera precisa la cantidad que se repita un tipo de caracteres// {a,a}: nos indica el intervalo de caracteres que quiero que aparezcan// Hay lenguajes que se puede colocar un sólo valor en el corchete, ejemplo {a}// Ejemplo:var e =/\d\d\d/;// Encuentra tres dígitos seguidos pero podemos ser más resumidosvar e =/\d{2,2}/;// Encuentra dos dígitos seguidosvar e =/\d{2,5}/;// Encuentra mínimo dos y máximo 6 dígitos seguidosvar e =/\d{4,}/;// Encuentra mínimo dos y hasta infinitos dígitos seguidos// Ojo, los caracteres reservados de las regex deben escaparse con '\', ejemplo '\.', '\-'// Ejemplo télefono 10 digitos separados por '-', '.'var e =/\d{2,2}\-?\d{2,2}\-?\d{2,2}\-?\d{2,2}\-?\d{2,2}\-?/;// Sólamente me toma el guión '-'var e =/\d{2,2}[\-\.]?\d{2,2}[\-\.]?\d{2,2}[\-\.]?\d{2,2}[\-\.]?\d{2,2}[\-\.]?/;// Agregamos el punto '.' creando una clase específica '[\-\.]'var e =/(\d{2,2}[\-\.]?){5,5}/;// La expresión que se repite 5 veces (\d{2,2}[\-\.]?) se puede reducirvar e =/(\d{2,2}[\-\.\s]?){5,5}/;// Si el télefono contiene además espacios cada dos dígitosvar e =/(\d\d[\-\.\s]?){4,4}\d\d/;// También se traduce a esto// Tips: los contadores también se puede resumir a los delimitadores de la siguiente manera// * ~ {0,}// + ~ {1,}// ? ~ {0,1}
var e = /\d{2,5}/; // Encuentra mínimo dos y máximo 6 dígitos seguidos
ES 5 EN LUGAR DE 6, corrígeme si me equivoco.
var e = /\d{4,}/; // Encuentra mínimo dos y hasta infinitos dígitos seguidos
ES 4 EN LUGAR DE 62 corrígeme si me equivoco.
Vuelvo a recomendar el siguiente website para tener claro como funcionan las Me ha parecido genial poder hacerlo y entender lo que explica Alberto aquí.
Codigo en java que hace matcher en gruops
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
package strings;