问题描述
我们是否可以使用正则表达式只替换位置3到8的字符串。例如: 1234567890应给出12######90
专家解答
当然可以。
匹配任意两个字符。后跟任意1-6个字符。然后是任意数量的尾随字符。
可以将此传递给regexp_replace ,并使用反向引用来保留第一个和第三个匹配项的值。
不过, Oracle不支持条件引用。因此,如果字符串长度在3到8个字符之间,我不确定只显示#s的方式,直到字符串的长度:
虽然您不需要使用正则表达式!标准substr也执行此工作:
(..)(.{1,6})(.*)
匹配任意两个字符。后跟任意1-6个字符。然后是任意数量的尾随字符。
可以将此传递给regexp_replace ,并使用反向引用来保留第一个和第三个匹配项的值。
不过, Oracle不支持条件引用。因此,如果字符串长度在3到8个字符之间,我不确定只显示#s的方式,直到字符串的长度:
with rws as (
select 1234567890 x from dual union all
select 1 x from dual union all
select 12345 x from dual
)
select regexp_replace(x, '(..)(.{1,6})(.*)', '\1######\3') from rws;
REGEXP_REPLACE(X,'(..)(.{1,6})(.*)','\1######\3')
12######90
1
12######
虽然您不需要使用正则表达式!标准substr也执行此工作:
with rws as (
select 1234567890 x from dual union all
select 1 x from dual union all
select 12345 x from dual
)
select substr(x, 1, 2) || rpad('#', length(substr(x, 3, 8)), '#') || substr(x, 9)
from rws;
SUBSTR(X,1,2)||RPAD('#',LENGTH(SUBSTR(X,3,8)),'#')||SUBSTR(X,9)
12########90
1
12###
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




