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

问题描述 投票:2回答: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)'

在此先感谢,Duncs

sql regex oracle regexp-replace regexp-like
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)

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>

0
投票

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

'val\$1(,|\\)', 'XYZ\1'
© www.soinside.com 2019 - 2024. All rights reserved.