3

我有一个格式如下的字符串:

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

3 回答 3

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)
于 2019-03-07T19:20:56.347 回答
0

您还可以搜索"val$1"where 后跟逗号或右括号(如果它恰好位于字符串的末尾)。

'val\$1(,|\\)', 'XYZ\1'
于 2019-03-08T13:44:49.683 回答
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>
于 2019-03-07T19:44:16.240 回答