RegExp 查找和替换忽略部分匹配
RegExp Find and Replace ignoring part matches
我有一个格式如下的字符串:
'(val,val,val,val,val,val,val,val,val,val,val,val,val,val)'
我想做的是用一些文本替换 val
,例如XYZ
只匹配 val
会产生:
'(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,XYZ0,XYZ1,XYZ2)'
如果有人愿意帮助我,我很想知道什么 reg exp 会忽略末尾的那些,因此生成的字符串如下所示:
'(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,val,val,val)'
您可以通过 \D
在 regexp_replace
的模式中添加一个额外的数字
select regexp_replace('(val,val,val,val,val,val,val,val,val,val,val,
val,val,val)','\val$1(\D)','XYZ') as "Result"
from dual;
Result
----------------------------------------------------------------------------------
(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,val,val,val)
你真的需要正则表达式吗?对于好的旧 REPLACE
函数来说,这看起来是一项简单的任务。如果您需要处理大量数据,正则表达式可能会慢很多。
SQL> select replace('(val,val,val,val,val,val,val,val,val,val,val,val,val,val)',
2 'val,', 'xyz,') result
3 from dual;
RESULT
----------------------------------------------------------------------------------
(xyz,xyz,xyz,val,val,val,val,val,val,val,val,val,val,val)
SQL>
您还可以搜索 "val"
,其中后跟逗号或右括号(如果恰好位于字符串末尾)。
'val$1(,|\)', 'XYZ'
我有一个格式如下的字符串:
'(val,val,val,val,val,val,val,val,val,val,val,val,val,val)'
我想做的是用一些文本替换 val
,例如XYZ
只匹配 val
会产生:
'(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,XYZ0,XYZ1,XYZ2)'
如果有人愿意帮助我,我很想知道什么 reg exp 会忽略末尾的那些,因此生成的字符串如下所示:
'(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,val,val,val)'
您可以通过 \D
在 regexp_replace
select regexp_replace('(val,val,val,val,val,val,val,val,val,val,val,
val,val,val)','\val$1(\D)','XYZ') as "Result"
from dual;
Result
----------------------------------------------------------------------------------
(XYZ,XYZ,XYZ,val,val,val,val,val,val,val,val,val,val,val)
你真的需要正则表达式吗?对于好的旧 REPLACE
函数来说,这看起来是一项简单的任务。如果您需要处理大量数据,正则表达式可能会慢很多。
SQL> select replace('(val,val,val,val,val,val,val,val,val,val,val,val,val,val)',
2 'val,', 'xyz,') result
3 from dual;
RESULT
----------------------------------------------------------------------------------
(xyz,xyz,xyz,val,val,val,val,val,val,val,val,val,val,val)
SQL>
您还可以搜索 "val"
,其中后跟逗号或右括号(如果恰好位于字符串末尾)。
'val$1(,|\)', 'XYZ'