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

Oracle中如何用符号替换单词中间字符,保留首尾字符?

在Oracle中用REGEXP_REPLACE实现保留单词首尾字符、替换中间内容的方案

原方案的问题

你尝试的REGEXP_REPLACE('ANNE MARRY', '(\w)\w', '\1*')无法得到期望结果。这个正则的逻辑是匹配连续两个单词字符,捕获第一个,将第二个替换为*,执行后会把ANNE变成A*N*,MARRY变成M*R*Y,和目标输出完全不符。

可行的REGEXP_REPLACE解决方案

REGEXP_REPLACE是完全可行的,只需要调整正则表达式,精准匹配每个单词的中间字符(即既不是单词第一个、也不是最后一个的字符)。

正确语句

SELECT REGEXP_REPLACE('Anne Marry', '(?<=\w)\w(?=\w)', '*') AS result FROM dual;

执行结果

该语句会输出:A••e M•••y,完全符合你的期望。

正则逻辑说明

  • (?<=\w):正向反向预查,确保当前字符的前一个字符是单词字符(\w,等价于[A-Za-z0-9_]),也就是当前字符不是单词的第一个字符。
  • \w:匹配需要替换的中间字符。
  • (?=\w):正向预查,确保当前字符的后一个字符是单词字符,也就是当前字符不是单词的最后一个字符。

通过这两个预查条件,就能精准定位到每个单词内部的所有中间字符,将它们逐个替换为*,同时保留首尾字符不变。

特殊情况兼容

如果遇到长度为1的单词(比如输入包含"A"),该正则不会进行任何替换,直接保留原字符;长度为2的单词(比如"Ab"),因为没有中间字符,也会原样保留,符合预期。

内容的提问来源于stack exchange,提问作者Anne.07

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:33:36