RegExp查找和替换忽略零件匹配

时间:2019-03-07 17:15:26

标签: sql regex oracle regexp-replace regexp-like

我的字符串格式如下:

'(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)'

预先感谢, 邓奇斯

3 个答案:

答案 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'