Предположим, у меня есть 5 условий, которые я проверяю с помощью lookahead. Я буду называть ихСоответствует некоторым условиям регулярного выражения (3 из 5)
a, b, c, d, e
Это будет мое регулярное выражение:
^(?=.*[a])(?=.*[b])(?=.*[c])(?=.*[d])(?=.*[e]).*$
это будет соответствовать всем перестановку, б, в, д, е, но я хочу, чтобы соответствовать по крайней мере 3 из 5 (не эксклюзивный как 'HVD' указал)
Значение этого будет проходить:
abc
abcde
abbbbbe
abccee
cddbbbbbeee
Но это будет не
aaaaa
bbbaaaaa
EDIT: Реальное использование для пароля политики - 5 условий (нижний регистр, верхний регистр, специальный полукокса, номер и т.д.), вы должны соблюдать х из у.
Это легко сделать в коде, но это теоретический вопрос для ограничения границ регулярного выражения.
Я думаю, у вас есть два варианта: 1) сопоставить каждую перестановку 3 из 5 или 2) захватить совпадения и проверить код, если 3 группы захвата имеют данные. –
«это будет соответствовать всей перестановке a, b, c, d, e» - не только. Он с радостью сообщит о матче на 'abcdef'. – hvd
Вы можете комбинировать их с помощью оператора 'OR' или использовать подпрограммы, если они поддерживаются вашим вкусом. – Jan