如何修改MySQL REGEXP查询匹配地址第5-11位内的连续双字母
解决方案
你可以通过两种方式实现需求,第一种是直接截取指定区间的子串再匹配,逻辑最直观不易出错:
方案1:截取第5-11位子串后匹配
MySQL的SUBSTRING函数可以提取指定位置的子串,第5位到第11位共7个字符,提取子串后再做正则匹配即可:
SELECT address FROM test WHERE SUBSTRING(address, 5, 7) REGEXP '([a-z])\\1';
这里把你原来冗长的字母枚举正则简化为([a-z])\\1:([a-z])匹配任意单个字母并捕获,\\1引用捕获的内容,就代表两个连续相同的字母。MySQL正则默认不区分大小写,不需要额外处理大小写问题。
方案2:直接在正则中限定匹配位置
也可以不用截取子串,直接通过正则限定重复双字母的位置:两个连续相同字母的第一个字符需要出现在第5到第10位(这样第二个字符就落在第6到第11位,整体都在要求的区间内),正则写法如下:
SELECT address FROM test WHERE address REGEXP '^.{4,10}([a-z])\\1';
^.{4}匹配前4个任意字符直接跳过,{4,10}限定从第5位开始到第10位的范围内出现捕获的重复字母。
测试验证
用你提供的测试数据执行上述查询,返回结果为:
Kennffort Plains Oaksbrook Terrace
符合你的筛选要求,不符合条件的Southern Old Saybrook会被正常排除。
内容的提问来源于stack exchange,提问作者Kintaro
相关产品推荐
相关产品推荐

