У меня есть несколько возможностей для ввода:
Что я хочу сделать
$common_terms_to_replace_for_tag_search = array("green","blue","grey","gray","black","red","silver","maroon","violet","white"); $term = str_replace($common_terms_to_replace_for_tag_search," ",$term);
Однако выше код работает только для примеров 1, 2, 4, а не для 3. Как обновить обновление кода для работы в таких случаях, как 3 выше? Большое спасибо!
Я бы предложил превратить эти цвета в список регулярных выражений, а затем запустить preg_replace
следующим образом:
<?php $string = 'black toshiba'; $all_color_alternation = "\b(?:green|blue|gr[ea]y|black|red|silver|maroon|violet|white)\b"; $common_terms_to_replace_for_tag_search = array( "/$all_color_alternation\\s+and\\s+$all_color_alternation/i", "/\\bblack(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bblue(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bgr[ea]y(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bred(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bsilver(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bmaroon(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bviolet(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i", "/\\bwhite(?=(?: and $all_color_alternation|\s+(?!and)))(?: and $all_color_alternation)?\\b/i"); $replacement = array(''); echo preg_replace($common_terms_to_replace_for_tag_search, $replacement, $string); ?>
Я добавил, что игнорирую вариант case, чтобы также удалять имена цветов в верхнем и нижнем регистре.
Первое регулярное выражение сначала удалит все цвета в контексте COLOR+and+COLOR
.
См. Пример программы .
Вывод:
black and white apple ==> apple black and decker drill system ==> black and decker drill system black apple ==> apple gray and black toshiba ==> toshiba