如何在MariaDB 10.3的SELECT查询中移除表情符号?
解决MariaDB 10.3.14中用REGEXP_REPLACE移除表情符号的问题
你的问题出在三个关键细节上:MariaDB的正则语法和你习惯的JS风格不一样,表情符号的Unicode范围覆盖不全,还有码点的写法错误。我来一步步帮你修正:
问题分析
- 正则语法错误:MariaDB的
REGEXP_REPLACE不需要用/包裹正则表达式,也不需要g修饰符——它默认就是全局替换所有匹配项的,你加的这些符号反而会让正则无法正确匹配。 - Unicode码点写法错误:在MariaDB中,匹配超出基本多语言平面(BMP)的字符(比如大部分表情符号),需要用
\x{XXXXXX}的格式(注意大括号),而不是\x10000这种写法。 - 表情范围不全:你只覆盖了辅助平面的一小部分表情,但很多常见表情其实在BMP范围内(比如你例子里的😒、😊属于
U+1F600到U+1F64F的emoji表情组),所以原来的正则根本匹配不到这些目标字符。
正确的查询语句
下面这个语句可以精准移除常见表情符号,同时完整保留你的非英文字符(比如çşığ)和HTML实体:
SELECT REGEXP_REPLACE("<çşığ_lorem😒ipsum😊dolor", '[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}\\x{1F680}-\\x{1F6FF}\\x{1F1E0}-\\x{1F1FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}]', '') AS cleaned_text;
正则范围说明
上面的正则包含了所有主流表情符号的Unicode范围:
\x{1F600}-\x{1F64F}:基础表情符号(Emoticons)\x{1F300}-\x{1F5FF}:符号与象形文字(Symbols & Pictographs)\x{1F680}-\x{1F6FF}:交通与地图符号(Transport & Map Symbols)\x{1F1E0}-\x{1F1FF}:国旗表情(Flags)\x{2600}-\x{26FF}:杂项符号(Miscellaneous Symbols)\x{2700}-\x{27BF}:装饰符号(Dingbats)
测试结果
执行上面的语句后,你会得到完全符合预期的结果:
<çşığ_loremipsumdolor
这样就完美保留了你需要的内容,同时彻底移除了所有表情符号。
内容的提问来源于stack exchange,提问作者Arda
相关产品推荐
相关产品推荐

