如何在Mysql字段中搜索包含字段中任何特殊字符的字符串?

如何在Mysql字段中搜索包含字段中任何特殊字符的字符串?,mysql,regex,Mysql,Regex,假设我有搜索字符串“mens health”,并且在我的数据库中有一个值为“men's health”的字段,我如何使用正则表达式将我的搜索字符串与此匹配?请记住,这只是一个示例,在我的数据库中,有许多记录也包含任意数量的非字母字符,例如“/,$,,-,(,),1,2…”?搜索字符串是从URL获取的,不应包含任何编码,以便于阅读 我最终创建了一个小函数,该函数生成一个正则表达式字符串,我在MySQL查询中使用了一个类似RLIKE的字符串,它应该匹配字母数字字符序列,而不管字母之间有什么特殊字符

假设我有搜索字符串“mens health”,并且在我的数据库中有一个值为“men's health”的字段,我如何使用正则表达式将我的搜索字符串与此匹配?请记住,这只是一个示例,在我的数据库中,有许多记录也包含任意数量的非字母字符,例如“/,$,,-,(,),1,2…”?搜索字符串是从URL获取的,不应包含任何编码,以便于阅读

我最终创建了一个小函数,该函数生成一个正则表达式字符串,我在MySQL查询中使用了一个类似RLIKE的字符串,它应该匹配字母数字字符序列,而不管字母之间有什么特殊字符

function GenerateCategoryRegex($SrchTerm) {
    $arrChar = str_split(str_replace(' ', '', $SrchTerm));
    $RegEx = '(^|;)+[[:space:]]*';
    foreach($arrChar as $Char) {
        $RegEx .= $Char . '{1}[^\w,]*';
    }
    $RegEx .= '[[:space:]]*(;|$)+';

    return $RegEx;
}

添加另一列包含“可搜索文本”,如“男士健康”。然后搜索该列,但显示原始列(“mean’s health”)

现在您可以自由地进行其他调整,例如在搜索列中添加同义词、常见拼写错误等


你的
REGEXP
可以变成一个简单的
,比如
,或者甚至可能是一个快速的
全文

为什么不直接使用
=
来实现完美的匹配呢?MySQL中没有“regex替代项”。我通过编写一个MySQL函数来输出字符串的净化版本,从而解决了这个问题。该函数逐字逐句地遍历源字符串并生成结果。与@JoshGreifer解决方案类似,我已在数据库中存储了该字段的一个经过消毒的副本,但我的副本中充斥着一些类似bbml的语法和引用。因为我知道每次有人搜索都会有问题,所以我选择了这条路线。这是一个SQL Server数据库,但这无关紧要。