Регулярное выражение, чтобы определить, если символ повторяется более трех раз - PullRequest
0 голосов
/ 10 октября 2018

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

Примеры:

  • привет как дела ... -> VALID
  • привет как дела ............. -> INVALID
  • hiii -> VALID
  • hiiiiii -> INVALID

и т. Д., И т. Д. Идея состоит в обнаружении бессмысленного текста.

Пока что моим решением было изменить регулярное выражение в ссылке как таковое.

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

ADAPTED: ^(?!.*([A-Za-z0-9\.\,\/\|\\])\1{3})$

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

Есть идеиКак я могу достичь этого?

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

РЕДАКТИРОВАТЬ: я нашел это регулярное выражение: ^.*(\S)(?: ?\1){9,}.*$ на гоэто вопрос https://stackoverflow.com/a/44659071/2149915 и адаптировали его так, чтобы он соответствовал только 3 символам, таким как ^.*(\S)(?: ?\1){3}.*$.

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

  • aaaa -> INVALID
  • hello ....... -> INVALID
  • ///// .... -> INVALID

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

  • . . . . .

Есть ли какие-либо изменения, которые можно сделать для достижения этой цели?

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что есть гораздо более простое решение, если вы ищете любой символ, повторенный более 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...