带有Word Boundaries和preg_quote的MySQL REGEXP

时间:2015-11-20 03:34:11

标签: php mysql regex zend-framework

我有一个PHP函数,使用ghci> reduce_tree (VNode (VLeaf 1) 2 (VNode (VLeaf 3) 4 (VLeaf 5))) id sum where sum t1 v t2 = t1 + v + t2 15 搜索产品名称的MySQL表列。我使用REGEXP而不是通配符(%%),因为产品名称可以是多个单词,但我希望匹配整个单词而不是过于贪婪。对于示例ProductName “Velvet Speaker / with Kit”,应搜索“Velvet”,但“Velv”或“elvet”不应该。

我的查询的REGEXP子句是WHERE

(实际上我使用的是Zend框架,所以"... WHERE ProductName REGEXP '[[:<:]]" . preg_quote($query) . "[[:>:]]'"。)

此代码在生产中顺利运行,但现在只要涉及正斜杠,它就不匹配。 “天鹅绒”和“扬声器”匹配,但“天鹅绒扬声器/带套件”不匹配(即使它以前做过)。我最近发现了这个bug,我的预感是在MySQL或PHP版本更改期间出现的。我使用的是MySQL 5.6和PHP 5.5。我找不到另一种解释。

我不知道这是->where('ProductName ?', '[[:<:]]' . preg_quote($query) . '[[:>:]]')的逃避问题,还是MySQL解释字边界的方式发生了变化。有没有人遇到过这个问题?有没有人建议像“Velvet Speaker / with Kit”或“Speaker / with Kit”这样的值如何在尊重单词边界时匹配?

0 个答案:

没有答案