Языки, которые поддерживают lookaheads (JavaScript, PCRE, Ruby, Java, Python) может использовать их, чтобы проверить, содержит ли строка/строки эти значения, в любом порядке:
^(?=.*\b(item1)\b)(?=.*\b(item2)\b)(?=.*\b(item3)\b)
Для вашего [1] данных, это становится:
^(?=.*\b(apple)\b)(?=.*\b(orange)\b)(?=.*\b(plum)\b)
Вы можете увидеть это на regex101 here.
Для ваших [2.] данных, это становится:
^(?=.*\b(apple)\b)(?=.*\b(grape)\b)(?=.*\b(plum)\b)
Вы можете увидеть это на regex101 here.
Вам, разумеется, не нужно иметь группы захвата ВНУТРИ взглядов. Вы могли бы просто соответствовать этим пунктам (без групп захвата), а затем использовать .*
в конце шаблона в соответствии с начала строки до конца:
^(?=.*\bapple\b)(?=.*\borange\b)(?=.*\bplum\b).*
Обратите внимание на regex101 однако, что вы больше не видите результатов в разделе ИНФОРМАЦИЯ ПО МАТЕРИАЛАМ (ничего не было зафиксировано), но вся строка была выбрана, когда совпадение было действительным.
Возможно. Какое ароматическое регулярное выражение вы используете? Что вы пробовали? – jmargolisvt
Я играю с множеством вариаций на http://www.regexr.com/, на которые я потратил много времени, я не мог редактировать их, чтобы что-то соответствовало. – Matthew
короткий ответ: да Можно с регулярными выражениями –