正则表达式在 php 中的第一个颜色匹配


Regex first color match in php

我正在尝试通过正则表达式在 php 中获得第一个颜色匹配这是我的代码

// product name (grey black)
// sample product name grey black
// product name (grey,black)
// samsung galaxy note4 golden/white/black
// $str is having one of the different product names mentioned above
$str = "product name (grey black)";
$color = ' ';
if(preg_match("#.+ ?[ '(](black|dark)#i",$str)){
    $color .= 'black';    
}else if(preg_match("#.+ ?[ '(](brown|grey)#i",$str)){
    $color .= 'grey';
}else if(preg_match("#.+ ?[ '(](golden|gold)#i",$str)){
    $color .= 'golden';
}
print $color;

但是此代码将黑色和深色设置为第一优先级,我想获取产品名称中第一次出现的颜色,例如在字符串"产品名称(灰黑色)"中,程序应在输出时返回灰色,但它返回黑色,因为如果满足条件,则第一个条件是产品名称在其第二或第三种颜色具有黑色。谁能帮我了解应该实现什么逻辑才能获得第一次出现的颜色。我在产品名称中知道的只是颜色名称。

任何帮助将不胜感激!

您可以创建一个通过字符串并检测到第一个颜色的函数。

function getColorFromString($string){
    $words = preg_split("/[^'w]/", $string);
    $colors = array(
        "black" => array("black", "dark"),
        "blue" => array("blue"),
        "gold" => array("gold", "golden"),
        "grey" => array("gray", "grey")
    );
    foreach($words as $word){
        foreach($colors as $key => $value){
            if(in_array(strtolower($word), $value))
                return $key;
        }
    }
    return null;
}

为您的案例添加所需的颜色。如果字符串包含单词 dark ,它将返回black 。基本上,数组的键是要返回的值,数组本身是键的别名。

例:

echo getColorFromString("product name (grey black)");

结果:

grey