MySQL REGEXP匹配空格分隔数字的问题排查
问题分析与解决方案
你的正则表达式存在一个明显错误:在匹配数字组之间的分隔符时,你同时写了普通空格和[[:space:]],比如[0-9]{4} [[:space:]] [0-9]{4},这相当于要求数字组之间必须有两个空白字符(一个明确的空格 + 一个[[:space:]]匹配的空白),但你的目标字符串里数字组之间只有单个空格,因此所有匹配都返回0。
修正方案
只需要保留一种空白匹配方式即可,两种选择:
- 若仅需匹配普通空格:直接写单个空格
- 若需兼容任意空白字符(如制表符、换行符):使用
[[:space:]]
修正后的SQL语句
- 匹配完整的"4位数字+空格+4位数字"字符串:
-- 仅匹配普通空格 SELECT '0630 3062' REGEXP '^[0-9]{4} [0-9]{4}$'; -- 兼容任意空白字符 SELECT '0630 3062' REGEXP '^[0-9]{4}[[:space:]][0-9]{4}$';
- 匹配包含"4位数字+空格+4位数字"的任意字符串:
SELECT 'Employee 346 retrad: 0630 3062' REGEXP '[0-9]{4} [0-9]{4}';
- 匹配包含"任意长度数字+空格+任意长度数字"的字符串:
SELECT 'Employee 346 retrad: 0630 3062' REGEXP '[0-9]+ [0-9]+'; SELECT 'Employee 346 retrad: 0630 3062 1657 in July Assessment' REGEXP '[0-9]+ [0-9]+';
内容的提问来源于stack exchange,提问作者Theo Fitchner
相关产品推荐
相关产品推荐

