如何在此代码中使用PHP preg_match分隔符模式?

时间:2019-07-05 03:35:51

标签: php preg-match

在阅读here之后并尝试了preg_quote之后,我理解了该错误,并且了解到必须使用定界符。

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

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

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

//do something
}

如果产品名称看起来像这样,则效果很好:

$searchProductName = Yupoong 6606 Retro Trucker Cap (Red);//$_POST
$productcolor = 'Red';//$_POST
如果

Preg_match的名称中带有正斜杠,则返回未知修饰符:

$searchProductName = Yupoong 6606 Retro Trucker Cap (Rust Orange/ Khaki);//$_POST
$productcolor = 'Rust Orange/ Khaki';//$_POST

我正试图通过消除像这样的正斜杠来克服这个问题:

$productColor = str_replace('/', ' ', $productcolor);

这将返回类似Rust Orange Khaki的字符串。但是,删除正斜杠会使preg_match与名称中的颜色不匹配。

如何解决此问题?请注意,并非所有产品的名称都带有正斜杠。有些只有单色。

2 个答案:

答案 0 :(得分:1)

preg_quote是您的朋友。它会转义特殊字符。

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

答案 1 :(得分:-1)

按照其他人的建议,我更改了定界符

更改了此

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

//do something
}

对此

if(preg_match("[$productcolor]", "$searchProductName")){
//do something
}

为我工作。