需求:搜索条件支持用户输入简体或者繁体或者简体繁体混合,同时数据库中字段存储也存在 简体、繁体、简体繁体混合。
解决方案采用如下sql语句
SELECT * FROM table WHERE field REGEXP '[关键词|關鍵詞]';
能搜索出
关键词
關鍵詞
關鍵词
原理
正则表达式中的 "|" 表示或的意思,所以:
"關鍵詞|关键词"
表示匹配字符串为 "關鍵詞" 或 "关键词"。
当字段值为"關鍵词"时,它既包含了"關鍵詞"也包含了"关键词"。
所以使用这个正则表达式可以匹配包含简体和繁体混合的字段值。
具体原理是:
"關鍵詞" 可以完全匹配 "關鍵詞"
"关键词" 可以部分匹配 "關鍵词" 的 "词"
根据正则表达式的匹配规则,只要有一种匹配形式成功,就算整体匹配成功
所以 "關鍵詞" 既可以完全匹配 "關鍵詞",也可以部分匹配 "关键词",因此整个表达式可以匹配混合简繁体的字段
综上,通过构建交叉的简繁体正则模式,利用正则表达式的匹配规则,可以实现对应混合简繁体字段的值进行匹配。
正则还可以继续使用其他写法
.:匹配任意单个字符。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前一个字符零次或多次。
+:匹配前一个字符一次或多次。
?:匹配前一个字符零次或一次。
[]:匹配括号内的任意一个字符。
[^]:匹配不在括号内的任意一个字符。
():捕获子模式。
|:用于逻辑或操作符。
默认情况下,REGEXP是区分大小写的。如果需要进行不区分大小写的匹配,可以使用REGEXP BINARY。
SELECT column_name
FROM table_name
WHERE column_name REGEXP BINARY 'pattern';
注意安全性:
在使用 REGEXP 时,要注意防止正则表达式注入攻击。类似于 SQL 注入攻击,正则表达式注入攻击可能会导致安全漏洞。要避免这种情况,建议对输入的数据进行严格的验证和过滤,确保只有可信的数据才被用于构建正则表达式。