我有一个oracle表,其列为varchar2(4000)。我希望能够找到9个连续数字,并将其替换为xxxxxxxxx。如果连续数字超过9位,我不想替换这些数字。我试过了
regexp_replace('this is my string of digits 987654321889890','\d{9}','xxxxxxxxx')
但这会返回'this is my string of digits xxxxxxxxx889890'
在这种情况下,我希望regexp引擎忽略任何超过9个连续数字的子字符串。
提前致谢 乔伊
答案 0 :(得分:2)
这应该产生预期的结果:
regexp_replace(str, '(^|[^0-9])([0-9]{9})($|[^0-9])', '\1xxxxxxxxx\3')
答案 1 :(得分:0)
西尔万已经发布了类似的答案。
使用11.1 Oracle数据库,可以将字符分组用于替换模式。 请参阅here。
与Sylvain一样,关键是创建一个由字符集封装的匹配模式,可以使用' xxxxxxxxx'来替换九个重复数字。
解决方案的步骤:
以下是我的示例解决方案:
SCOTT@dev> list
1 WITH t AS
2 (SELECT 'this is my string of digits 987654321889890' txt_val FROM dual
3 UNION
4 SELECT 'this is my string of digits 54321889890' FROM dual
5 UNION
6 SELECT 'this is my string of digits 987654321' FROM dual
7 UNION
8 SELECT 'this is my string of digits 98761189890' FROM dual
9 UNION
10 SELECT 'this is my string of digits 121889890' FROM dual
11 )
12 SELECT t.txt_val,
13 regexp_replace(t.txt_val,'([^0-9]|^)(\d{9})([^0-9]|$)','\1xxxxxxxxx\3') txt_val_fixed
14* FROM t
SCOTT@dev> /
TXT_VAL TXT_VAL_FIXED
=========================================== ================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
this is my string of digits 121889890 this is my string of digits xxxxxxxxx
this is my string of digits 54321889890 this is my string of digits 54321889890
this is my string of digits 98761189890 this is my string of digits 98761189890
this is my string of digits 987654321 this is my string of digits xxxxxxxxx
this is my string of digits 987654321889890 this is my string of digits 987654321889890
答案 2 :(得分:0)
感谢大家提供的有用信息。我结束了
JAM @ DEV>选择regexp_replace('987654653这是我的号码950569808890现在它不是878788976而且这个小于8823727还有一个950877665', '(\ D | ^)(\ d {9})(\ D | $)','xxx-xx-xxxx',1,0,'m')来自双重的“regexpreplace”;
xxx-xx-xxxx他是我的号码950569808890现在它不是xxx-xx-xxxx而且这个 小于8823727再多xxx-xx-xxxx