Регулярное выражение, чтобы использовать каждую букву только один раз?


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

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

^[lrsa]*m[lrsa]*$
Вы будете соответствовать "ламам "(действительным), но также и" ламам "(недействительным для наших целей, потому что у вас был только один"а"). Если бы ваш набор букв был "lrsaa", вы хотели бы соответствовать"lamas".

Возможно ли это с регулярными выражениями, или я должен справиться с этим программно?

1 5

1 ответ:

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

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

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