如何在这段代码中使用PHP预匹配分隔符模式?

如何在这段代码中使用PHP预匹配分隔符模式?,php,preg-match,Php,Preg Match,在阅读和尝试之后,我理解了错误,并且我理解我必须使用分隔符 问题是其中一个分隔符是正斜杠,它也是我要比较的字符串的一部分。我不知道如何解决我的问题。代码中的分隔符放在哪里 我使用preg_match来识别具有以下产品名称的给定产品: if (preg_match("/\b$productcolor\b/i", "$searchProductName")) { //do something } 如果产品名称如下所示,则此操作非常有效: $searchProductName = Yupoong

在阅读和尝试之后,我理解了错误,并且我理解我必须使用分隔符

问题是其中一个分隔符是正斜杠,它也是我要比较的字符串的一部分。我不知道如何解决我的问题。代码中的分隔符放在哪里

我使用preg_match来识别具有以下产品名称的给定产品:

if (preg_match("/\b$productcolor\b/i", "$searchProductName")) { 

//do something
}
如果产品名称如下所示,则此操作非常有效:

$searchProductName = Yupoong 6606 Retro Trucker Cap (Red);//$_POST
$productcolor = 'Red';//$_POST
$searchProductName = Yupoong 6606 Retro Trucker Cap (Rust Orange/ Khaki);//$_POST
$productcolor = 'Rust Orange/ Khaki';//$_POST
$productColor = str_replace('/', ' ', $productcolor);
Preg_match
如果名称中有如下正斜杠,则返回未知修饰符:

$searchProductName = Yupoong 6606 Retro Trucker Cap (Red);//$_POST
$productcolor = 'Red';//$_POST
$searchProductName = Yupoong 6606 Retro Trucker Cap (Rust Orange/ Khaki);//$_POST
$productcolor = 'Rust Orange/ Khaki';//$_POST
$productColor = str_replace('/', ' ', $productcolor);
我试图通过消除正斜杠来克服这个问题,如下所示:

$searchProductName = Yupoong 6606 Retro Trucker Cap (Red);//$_POST
$productcolor = 'Red';//$_POST
$searchProductName = Yupoong 6606 Retro Trucker Cap (Rust Orange/ Khaki);//$_POST
$productcolor = 'Rust Orange/ Khaki';//$_POST
$productColor = str_replace('/', ' ', $productcolor);
这将返回如下字符串
锈橙色卡其布
。但是删除正斜杠会使
preg_匹配
与名称中的颜色不匹配

我怎样才能解决这个问题?请注意,并非所有产品的名称都有正斜杠。有些是单色的。

是你的朋友。它逃避特殊字符

if (preg_match("/\b" . preg_quote($productcolor, "/") . "\b/i", $searchProductName)) { 
    //do something
}

使用不同的delimeter。如前所述,更改分隔符或转义正则表达式(使用-)请查看Toto答案(完全回答您的问题)并接受它。如果我是您,我将添加分隔符作为
preg\u quote
的第二个参数。