регулярное количество повторных символов - PullRequest
2 голосов
/ 03 августа 2011

Если у меня есть набор символов, таких как «abcdefghij», и я использую эти символы, я генерирую случайный пароль, используя эти символы.Сгенерированный пароль может содержать, например, 6 символов.Как проверить пароль с помощью регулярных выражений, чтобы соседние символы не были идентичными и символ не повторялся более двух раз?

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Вы можете использовать что-то вроде:

/^
  (?:(.)
     (?!\1)           # neighbor characters are not identical
     (?!(?>.*?\1){2}) # character does not occur more than twice
  )*
\z/x

Цитирование Perl, атомарная группа может быть удалена, если не поддерживается.


В Java-регулярных выражениях это можно записать так:

^(?:(.)(?!\1|(?:.*?\1){2}))*\z
0 голосов
/ 03 августа 2011

AFAIK, это не может быть сделано с помощью простого регулярного выражения (в частности, гарантируя, что буква появляется только в максимуме два раза. Вы могли бы сделать несколько выражений, таких как

[^a]*(a[^a]*(a[^a]*))
[^b]*(b[^b]*(b[^b]*))
....

, а также (сопоставление означает, что проверка не пройдена):

[^a]*aa[^a]*
[^b]*bb[^b]*

но, очевидно, это не очень хорошая идея.

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

Кстати ... почему одержимость регулярным выражением? Программирование этих проверок тривиально, регулярные выражения полезны в ряде случаев, но не каждая проверка может быть выполнена с помощью регулярных выражений.

...