MySQL REGEXP下%word%等效及字符数限制正则写法咨询
MySQL REGEXP 不区分大小写正则匹配方案
第一个正则(等效SQL通配符%word%)验证
你当前尝试的写法'^[a-zA-Z]*word[a-zA-Z]*$'和%word%不等效,核心问题如下:
[a-zA-Z]*仅能匹配大小写英文字母,而SQL通配符%支持匹配任意字符(数字、符号、特殊字符等均包含),如果目标字符串包含非字母内容(例如word123、_word),该写法会匹配失败,但%word%可以正常命中。- 首尾的
^、$锚定和前后的[a-zA-Z]*属于冗余逻辑,MySQL REGEXP默认是子串匹配规则,只要字符串任意位置命中模式就会返回真,不需要手动补全前后任意字符的匹配规则。
如果要实现和%word%完全等效的不区分大小写匹配,直接使用'word'作为REGEXP匹配模式即可,MySQL默认的*_ci后缀大小写不敏感排序规则下可以直接生效。
第二个正则(word前后缀字符均不足3个)实现
符合需求的匹配模式为'^.{0,2}word.{0,2}$',逻辑说明:
^匹配字符串开头、$匹配字符串结尾,确保对整个字符串做长度校验.{0,2}匹配0-2个任意字符,严格限制word前后的字符数最多为2个,任意一侧字符数达到3个及以上就无法命中
你的测试用例匹配结果如下:
words:前缀0个字符、后缀1个字符,匹配swordfish:后缀4个字符,不匹配theword:前缀3个字符,不匹配mywordly:前缀2个字符、后缀2个字符,匹配miswordeds:前缀3个字符,不匹配
使用示例SQL
-- 等效%word%的匹配 SELECT 1 WHERE 'SWORDFISH' REGEXP 'word'; -- 前后缀均不足3个字符的匹配 SELECT 1 WHERE 'mywordly' REGEXP '^.{0,2}word.{0,2}$';
如果你的字段使用大小写敏感的排序规则(后缀为_bin或_cs),只需要把模式中的word替换为[Ww][Oo][Rr][Dd],即可实现不区分大小写匹配。
内容的提问来源于stack exchange,提问作者Kiwa
相关产品推荐
相关产品推荐

