MySQL 8.0.28 ICU正则筛选含'off'且排除用户名含'off'的推特数据
MySQL 8.0 推特内容筛选正则实现
匹配规则说明
筛选逻辑需要同时满足两个要求:
- 推文内容中存在独立单词
off - 所有@提及的用户名(@后到下一个相邻分隔符之间的内容)中,任意位置都不出现
off片段,覆盖@offersforyou(off在开头)、@groffers(off在中间)等所有用户名带off的场景
可直接使用的SQL代码
基础场景(用户名后以空格分隔):
-- 表名、字段名替换成你实际的名称即可 SELECT * FROM twitter_dataset WHERE tweet_text REGEXP '^(?!.*@[^ ]*off).*\\boff\\b.*$';
适配用户名后紧接标点的场景(比如@groffers,、@offersforyou!这类常见推文格式):
SELECT * FROM twitter_dataset WHERE tweet_text REGEXP '^(?!.*@[^ @,.:;!?\n]*off).*\\boff\\b.*$';
正则逻辑拆解
MySQL 8.0.28的REGEXP基于ICU正则引擎实现,支持环视语法,可以用单条正则完成全逻辑过滤,不需要多层嵌套字符串处理函数,各部分含义如下:
^:锚定字符串起始位置(?!.*@[^ ]*off):负向前瞻校验,只要字符串任意位置存在「@开头、后续连续非分隔字符中包含off」的模式(也就是带off的@用户名),直接判定匹配失败,对应剔除逻辑.*\\boff\\b:匹配正文中的独立单词off,\\b是单词边界符,避免把office、offer、offload这类仅包含off字符片段的词误判.*$:匹配字符串剩余内容直到结束
注意事项
- MySQL字符串中反斜杠需要转义,因此单词边界符要写成
\\b,不要直接写\b - 默认REGEXP是大小写不敏感匹配,如果需要严格匹配小写的
off,可以在REGEXP前加BINARY关键字开启大小写敏感匹配 - 可以根据实际推文的标点情况,调整
[^ ]或者[^ @,.:;!?\n]里的分隔符列表,覆盖更多边界场景
内容的提问来源于stack exchange,提问作者swapnilindahood
相关产品推荐
相关产品推荐

