Regex использовать каждую букву только один раз? - PullRequest
5 голосов
/ 13 апреля 2010

Можно ли создать регулярное выражение в стиле PCRE, которое будет соответствовать каждой букве в списке только один раз?

Например, если у вас есть буквы «lrsa» и вы пытаетесь сопоставить список слов с:

^[lrsa]*m[lrsa]*$

вы будете соответствовать "lams" (действительный), но также и "lamas" (недопустимый для наших целей, потому что у вас был только один "a"). Если бы ваш набор букв был "lrsaa", вы бы хотели соответствовать "lamas".

Возможно ли это с помощью регулярных выражений или я должен обрабатывать это программно?

1 Ответ

3 голосов
/ 13 апреля 2010

Вы можете использовать отрицательный прогноз:

^(?!.*?(.).*?\1)[lrsa]*m[lrsa]*$

будет делать то, что вы хотите

...