You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB REGEXP_REPLACE替换参数中UPPER/UCASE不生效问题咨询

问题原因

这不是REGEXP_REPLACE()函数的bug,是写法没搞对SQL执行顺序和正则反向引用的生效时机:

  • REGEXP_REPLACE的所有入参都会在正则匹配启动前完成求值。你写的CONCAT('\\1', '-', UPPER('\\1'))执行时,\\1还只是普通字符串(内容为反斜杠加数字1),根本没绑定正则捕获到的实际内容,UPPER('\\1')计算完结果仍然是\1,完全没起到转大写的作用。
  • 最后实际传给替换逻辑的字符串是\1-\1,两个反向引用都取到开头匹配的小写a,就输出了a-an der Mauer。至于原字符串里的Der变成der,是你当前使用的排序规则为大小写不敏感模式,正则匹配时做了大小写归一处理,不属于核心问题。
正确写法

不要在替换串的构造参数里对反向引用占位符套字符串函数,直接用PCRE正则原生支持的替换大小写转换标记即可,替换串里的\U标记会将后续捕获的内容自动转为大写:

SELECT REGEXP_REPLACE('an Der Mauer', '^([[:lower:]])', '\\1-\\U\\1');

执行后就能得到你预期的a-An der Mauer效果。
如果后续要对捕获内容做更复杂的函数运算,建议拆分步骤:先把要处理的文本片段截取出来单独加工,再拼回原字符串,不要在REGEXP_REPLACE的替换参数里提前操作反向引用占位符。

内容的提问来源于stack exchange,提问作者hellerim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:36:20