正则表达式PHP - 替换名称中的颜色 - 但前提是它们是颜色而不是公司名称的一部分

时间:2015-04-10 14:41:34

标签: php regex parsing

我有一些输入术语的可能性:

  1. “黑蓝玩具”(黑色和蓝色是颜色)==> “玩具”
  2. “银勺”(银色是一种颜色)==> “勺”
  3. “黑色和分层钻系统”(注意,黑色不是颜色 - 它是品牌名称的一部分 - 黑色和甲板)==> “黑色和甲板钻系统”
  4. “红色汽车”(红色是一种颜色)==> “汽车”
  5. 我想做什么

    • 用“”替换颜色 - 但仅限于颜色。因此,对于上面的#3,我不希望黑色被替换,因为它是品牌的一部分。在“和”之后,它不是一种颜色,所以我可以推断这是一个名称的一部分。
    • 现在的问题是我该怎么办? :)
    $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的情况?非常感谢!

1 个答案:

答案 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