我有一些输入术语的可能性:
我想做什么
$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的情况?非常感谢!
答案 0 :(得分:1)
我建议将这些颜色转换为正则表达式列表,然后像这样运行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);
?>
我添加了i
忽略大小写选项,同时删除大写和小写的颜色名称。
第一个正则表达式将首先移除COLOR+and+COLOR
上下文中的所有颜色。
请参阅sample program。
输出:
black and white apple ==> apple
black and decker drill system ==> black and decker drill system
black apple ==> apple
gray and black toshiba ==> toshiba