Простой шаблон для проверки наличия всех букв в слове с использованием lookaheads:
\b(?=\w*a)(?=\w*b)(?=\w*c)(?=\w*d)\w+\b
Вы можете захотеть ^...$
вместо \b...\b
, если хотите проверить слово, а не захватывает его, и вы можете захотеть изменить \w
на свой приемлемый алфавит.
Каждый токен (?=\w*a)
является заглядыванием - он проверяет наличие букв иa
впереди, но не продвигается - следующее условие, b
, снова проверяется с самого начала.Последний \w+
- это то, что на самом деле фиксирует слово, после того как мы проверили все ли буквы.
Рабочий пример: http://rubular.com/r/L00DTpE813
См. Также: Lookahead и Lookbehind Zero-Ширина утверждений