У меня есть следующий набор данных:Regex ключевое предложение
names = ["brad pitt", "george clooney", "james cameron"];
Мне нужно регулярное выражение, которое соответствует "Brad Pitt" и "Джордж Клуни" подарил:
"brad peter clooney"
Кроме того, она должна соответствовать: "brad pitt"
когда запрос равен "brad peter pitt"
Обратите внимание, что я использую PHP, и я могу разделить запрос и манипулировать им. например, я могу попробовать это:
((brad)+.*(peter)+.*(pitt)+.*+)
, но его не будет совпадать, так как у меня есть 1 или больше после каждого имени, а если поместить * (0 или более) его будет соответствовать все записи, так как это также означает, ничего не согласен.
Каким образом делает 'штифтика питер clooney' матч' Брэд pitt' и 'ДЖОРДЖ clooney'? Я нахожу это немного неясным. Является основным вопросом «как проверить, содержит ли данная строка один из набора строк»? – Vulcan
Это сервис подсказки ключевых слов, где, если вы наберете: brad peter clooney, система должна иметь возможность предлагать оба имени. Я мог бы использовать любое из трех слов типа «/(.*brad.*)|(.*peter.*)|(.*clooney.*)i/», но это будет соответствовать множеству других предметов. Так, например, если вы ищете brad pitt. его также принесет «brad james» – Reza
Для такого поиска я бы рекомендовал использовать итеративный подход к словам в каждой строке, а не в регулярном выражении, для ясности. Я бы предположил, что этот подход также будет выполняться быстрее, чем запустить регулярное выражение с многочисленными разделителями OR, но это потребует тестирования. – Vulcan