我有一个格式如下的字符串:
'(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)'
在此先感谢,Duncs
您可以通过\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)
你真的需要正则表达式吗?对于良好的旧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>
您还可以搜索"val$1"
,然后搜索逗号或结尾符号(如果它恰好位于字符串的末尾)。
'val\$1(,|\\)', 'XYZ\1'