Regex, чтобы найти любой символ, используемый более 3 раз в строке, но не последовательно - PullRequest
4 голосов
/ 04 декабря 2009

Я уже нашел много действительно близких ответов, но не совсем.

Мне нужно посмотреть на строку и найти любой символ, который используется более 3 раз. В основном, чтобы ограничить пароль, чтобы запретить "Миссисипи", поскольку он имеет более 3 с. Я думаю, что это должны быть только символы, но должны быть Unicode. Таким образом, я думаю, ((альфа :) для набора символов, чтобы соответствовать.

Я нашел (\w)\1+{4,}, который находит последовательные символы, такие как ssss или missssippi, но не, если они не являются последовательными.

Проходя через другие вопросы регулярных выражений, я узнаю, что кто-то ответил на них, но их много, но радости пока нет.

Ответы [ 3 ]

4 голосов
/ 04 декабря 2009

Это должно сделать это:

/(.)(.*\1){3}/

Нет смысла пытаться объединить это с проверкой допустимых символов. Сначала вы должны проверить, что все символы являются допустимыми, а затем запустить этот тест. Вот почему можно использовать «.» здесь.

Это будет медленно, хотя. Было бы быстрее перебрать строку и посчитать символы. Хотя для ваших целей я сомневаюсь, что это имеет большое значение, так как строки такие короткие.

1 голос
/ 04 декабря 2009
.*(\w).*\1.*\1.*\1.*

Это будет соответствовать строке, имеющей любое количество символов, затем определенный символ и тот же символ, повторенный три раза после этого (всего четыре), с любым количеством символов (0..n) между ними. Это то, что ты хочешь, верно?

Проверьте это, например, http://www.regexplanet.com/simple/index.html

Это регулярное выражение соответствует, например, «Миссисипи» (> 3 с) и «Мерцание, мерцание, маленькая звезда» (> 3 т)

1 голос
/ 04 декабря 2009
(\w)(.*\1){2,}

Подберите «слово-символ», затем 2 копии «что-нибудь, затем первое». Таким образом, 3 копии первой вещи, с чем-либо между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...