我的字符串格式如下:
'(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)'
,我想做的是将val$1
替换为一些文字,例如XYZ
仅匹配val$1
会产生:
'(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,XYZ0,XYZ1,XYZ2)'
如果有人愿意帮我,我想知道什么reg exp会在最后忽略它们,所以重新排列字符串看起来像这样:
'(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)'
预先感谢, 邓奇斯
答案 0 :(得分:0)
您可以在\D
的模式中添加regexp_replace
以外的数字
select regexp_replace('(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,
val$10,val$11,val$12)','\val\$1(\D)','XYZ\1') as "Result"
from dual;
Result
----------------------------------------------------------------------------------
(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)
答案 1 :(得分:0)
您真的需要正则表达式吗?对于旧的REPLACE
函数来说,这看起来像是一项简单的任务。如果您需要处理大量数据,则正则表达式可能会变慢。
SQL> select replace('(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)',
2 'val$1,', 'xyz,') result
3 from dual;
RESULT
----------------------------------------------------------------------------------
(xyz,xyz,xyz,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)
SQL>
答案 2 :(得分:0)
您还可以搜索"val$1"
,后跟逗号或右括号(如果碰巧在字符串末尾)。
'val\$1(,|\\)', 'XYZ\1'