Expresiones regulares para detectar si el personaje se repite más de tres veces

davy307:

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?

Mena:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=209691&siteId=1
Recomendado
Clasificación