Regex для обнаружения, если символ повторяется более чем в три раза

davy307:

Я пытался следовать решение , описанное здесь: https://stackoverflow.com/a/17973873/2149915 , чтобы попытаться соответствовать строке со следующими требованиями: - повторяется более 3 -х символов последовательно в строке должны быть согласованы и вернулся ,

Примеры:

  • привет, как ты ... -> ДЕЙСТВУЕТ
  • привет, как ты ............. -> INVALID
  • Hiii -> ДЕЙСТВУЕТ
  • hiiiiii -> INVALID

и так далее, и так далее, идея заключается в том, чтобы обнаружить текст, который бессмысленный.

До сих пор мое решение было изменить регулярное выражение в ссылке как таковой.

ОРИГИНАЛ: ^(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9]+$

АДАПТИРОВАННЫЙ: ^(?!.*([A-Za-z0-9\.\,\/\|\\])\1{3})$

По существу я убрала требование для захвата групп чисел и букв и цифр видели здесь: (?=.*[a-z])(?=.*\d)[A-Za-z0-9]+и пыталась добавить дополнительное обнаружение таких символов, как и ./,\т.д. , но это не кажется , что матч вообще с любыми персонажами ...

Любые идеи о том, как я могу добиться этого?

заранее спасибо :)

EDIT: я нашел это регулярное выражение: ^.*(\S)(?: ?\1){9,}.*$по этому вопросу https://stackoverflow.com/a/44659071/2149915 и адаптировали его , чтобы соответствовать только 3 -х символов , как , например ^.*(\S)(?: ?\1){3}.*$.

Теперь он обнаруживает такие вещи, как:

  • аааа -> INVALID
  • привет ....... -> INVALID
  • ///// .... -> INVALID

Однако он не учитывает пробелы, такие, как это:

  • . . . . .

есть модификация, что может быть сделано для достижения этой цели?

Мена:

Я думаю , что есть гораздо более простое решение , если вы ищете какой - либо символ повторяется более чем в 3 раза:

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)
        );
    }
}

Выход

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

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=209685&siteId=1