Возможный дубликат:
Регулярные выражения: существует ли операция И?Я позволяю своим пользователям ввести критерий поиска: "панель нечто".
Я был бы для преобразования пользовательского запроса в строку, которая распознает слова, но игнорирование порядка:
bla foo bla bar = match ^^^ ^^^ bla bar bla foo = match (order = reversed) ^^^ ^^^ bla bla bla foo = no match (only one word) ^^^ bar bla bla bla = no match (only one word) ^^^
Примечание: Пример содержит 2 слова, но мои пользователи взбесятся и введут больше слов.
Если порядок не состоит в том, чтобы быть проигнорирован, это просто: замените пробелы ".*" и у меня есть очень хорошее соответствие.
Но как я могу позволить регулярному выражению проигнорировать порядок и все еще соответствовать обоим (или больше) слова?
Я должен генерировать regex, который будет соответствовать возможным комбинациям порядка?
См. этот ответ: Регулярные выражения: Есть ли оператор AND?
Когда порядок не имеет значения, это, по сути, серия отдельных поисков, верно? Можете ли вы просто выполнить 1 поиск для каждого слова и вернуть результаты только тогда, когда все поиски были успешными?
Я рекомендую смешанный подход. Сохраните условия поиска, разделенные |, в переменной $ search. Затем найдите / (?: $ Search) ... (?: $ Search) / g
где (?: $ Search) повторяется столько раз, сколько искомых терминов.
Если он совпадает, разделите его на термины, отсортируйте и проверьте наличие повторов. Если их нет, он совпадает; если есть повторы, переходите к следующему.
Какой язык .NET вы используете? Мы можем дать образец кода.