He tratado de seguir la solución que se describe aquí: https://stackoverflow.com/a/17973873/2149915 para tratar de coincidir con una cadena con los siguientes requisitos: - Más de 3 caracteres repiten secuencialmente en la cadena debe ser emparejado y regresó .
Ejemplos:
- hola como estas ... -> VÁLIDO
- hola como estas ............. -> NO VÁLIDA
- hiii -> VÁLIDO
- hiiiiii -> NO VÁLIDA
y así sucesivamente y así sucesivamente, la idea es detectar texto que no tiene sentido.
Hasta ahora mi solución fue modificar la expresión regular en el enlace como tales.
ORIGINAL: ^(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9]+$
ADAPTADO: ^(?!.*([A-Za-z0-9\.\,\/\|\\])\1{3})$
Esencialmente i eliminó el requisito para los grupos de captura de números y caracteres alfanuméricos visto aquí: (?=.*[a-z])(?=.*\d)[A-Za-z0-9]+
e intentado añadir la detección adicional de caracteres tales como ./,\
, etc. pero tampoco parece coincidir en absoluto con cualquier carácter ...
¿Alguna idea sobre cómo puedo lograr esto?
gracias por adelantado :)
EDIT: He encontrado esta expresión regular: ^.*(\S)(?: ?\1){9,}.*$
sobre esta cuestión https://stackoverflow.com/a/44659071/2149915 y se han adaptado para que coincida con sólo 3 personajes como tales ^.*(\S)(?: ?\1){3}.*$
.
Ahora detecta cosas como:
- AAAA -> NO VÁLIDA
- hola ....... -> NO VÁLIDA
- ///// .... -> NO VÁLIDA
sin embargo, no tiene en cuenta los espacios en blanco como este:
. . . . .
¿hay una modificación que se puede hacer para lograrlo?
Creo que hay una solución mucho más simple si usted está buscando cualquier carácter repetido más de 3 veces:
String[] inputs = {
"hello how are you...", // -> VALID
"hello how are you.............", // -> INVALID
"hiii", // -> VALID
"hiiiiii" // -> INVALID
};
// | group 1 - any character
// | | back-reference
// | | | 4+ quantifier including previous instance
// | | | | dot represents any character,
// | | | | including whitespace and line feeds
// | | | |
Pattern p = Pattern.compile("(.)\\1{3,}", Pattern.DOTALL);
// iterating test inputs
for (String s: inputs) {
// matching
Matcher m = p.matcher(s);
// 4+ repeated character found
if (m.find()) {
System.out.printf(
"Input '%s' not valid, character '%s' repeated more than 3 times%n",
s,
m.group(1)
);
}
}
Salida
Input 'hello how are you............. not valid', character '.' repeated more than 3 times
Input 'hiiiiii' not valid, character 'i' repeated more than 3 times
Input 'hello how are you' not valid, character ' ' repeated more than 3 times