2013-02-28 5 views
1

Я хочу, чтобы строка состояла из уникальных символов из набора [a, i, b, w]. Строка должна состоять из минимум 1 и не более 4 символов из этого набора но символы не могут повторяться, и любая перестановка разрешена. Так, например, aa или bwaw не допускается. Могу ли я использовать регулярное выражение для проверки этого или мне нужно самому разобрать его в коде?Проверка, содержит ли строка уникальные символы из определенного набора

Спасибо

ответ

3

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

^(?!.*(.).*\1)[<set_of_characters>]{1,<cardinality_of_character_set>}$ 

Например, в вашем случае:

^(?!.*(.).*\1)[abiw]{1,4}$ 

(?!.*(.).*\1)является нулевой шириной отрицательный внешний вид, проверяющий, можете ли вы найти повторяющийся символ в тексте вперед .*(.).*\1. Это использует вышеизложенное предположение, что символы не должны появляться дважды во входной строке.

[abiw]{1,4} всего лишь 1 - 4 вхождения любых символов [abiw]. Поскольку мы проверили, что строка не содержит повторяющегося символа с отрицательным надзором выше, эта часть просто проверяет, что строка состоит из только символов в указанном наборе.

+0

Большое спасибо за решение и подробное объяснение :) – Jim

Смежные вопросы