我正在尝试通过正则表达式在 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