Должны ли совпадать следующие строки?
Dave Imma Dave
Dave Imma Dive Imma
Я предполагаю, что первое не должно, потому что оно не содержит всех трех имен, но дубликаты, хорошо? Если нет, то это регулярное выражение делает свое дело:
^(?:\b(?:(?!(?:Dave|Imma|Dive)\b)\w+[ \t]+)*(?:Dave()|Imma()|Dive())[ \t]*){3}$\1\2\3
Я осторожно использую слово «трюк». :) Это доказывает, что регулярное выражение может сделать работу, но я не ожидал бы увидеть это регулярное выражение в любом серьезном приложении. Вам было бы гораздо лучше написать метод для этой цели.
(Кстати, если дубликаты разрешены , просто удалите $
.)
РЕДАКТИРОВАТЬ: Другой вопрос: имена должны совпадать только в виде полных слов? Другими словами, должны ли эти строки совпадать?
DaveCar PomDive Imma
DaveImmaDive
Пока что единственным другим ответом, который обеспечивает как уникальность, так и полные слова, является ответ Короната, и он не может сопоставить строки с дополнительными словами, как эти:
Dave Imma Car Pom Dive
Pyro Dave Imma Dive