Позвольте регулярному выражению проигнорировать порядок критериев поиска [дубликат]

Возможный дубликат:
Регулярные выражения: существует ли операция И?

Я позволяю своим пользователям ввести критерий поиска: "панель нечто".

Я был бы для преобразования пользовательского запроса в строку, которая распознает слова, но игнорирование порядка:

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, который будет соответствовать возможным комбинациям порядка?

1
задан Community 23 May 2017 в 10:27
поделиться

3 ответа

0
ответ дан 3 September 2019 в 00:15
поделиться

Когда порядок не имеет значения, это, по сути, серия отдельных поисков, верно? Можете ли вы просто выполнить 1 поиск для каждого слова и вернуть результаты только тогда, когда все поиски были успешными?

1
ответ дан 3 September 2019 в 00:15
поделиться

Я рекомендую смешанный подход. Сохраните условия поиска, разделенные |, в переменной $ search. Затем найдите / (?: $ Search) ... (?: $ Search) / g где (?: $ Search) повторяется столько раз, сколько искомых терминов.

Если он совпадает, разделите его на термины, отсортируйте и проверьте наличие повторов. Если их нет, он совпадает; если есть повторы, переходите к следующему.

Какой язык .NET вы используете? Мы можем дать образец кода.

1
ответ дан 3 September 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: