为什么正则表达式在oracle中不能按预期工作

问题描述 投票:0回答:1

我需要用例如替换这个

:VARCHAR_1
来自这个字符串:'
if :VARCHAR_1 = "1"'
。数字 1,如果冒号后面有类似
:P4_VARCHAR_1
的内容(如果它实际上是页面项),则忽略它。 我已经通过在线生成器在线制作了其中几个正则表达式,但由于某种原因,Oracle 的规则似乎不起作用...... 这是一个应该实际工作的示例正则表达式:

select REGEXP_REPLACE('if :P4_VARCHAR_1 = "1"', ':([^P]|P[^\d_])(\w+)', '1') from dual;

这里我预计不会有任何改变,输出:

if :P4_VARCHAR_1 = "1"
对于这种情况:

select REGEXP_REPLACE('if :VARCHAR_1 = "1"', ':([^P]|P[^\d_])(\w+)', '1') from dual;

输出:

if 1 = "1"
那么如何在oracle中使其工作

sql oracle
1个回答
0
投票

字符类中无法识别“digit”的“\d”快捷方式。将其替换为“[0-9]”:

SELECT REGEXP_REPLACE('if :P4_VARCHAR_1 = "1"', ':([^P]|P[^[0-9]_])(\w+)', '1')
  FROM DUAL

退货

if :P4_VARCHAR_1 = "1"
© www.soinside.com 2019 - 2024. All rights reserved.