使用oracle regexp_replace替换部分代码

问题描述

我有一些代码,我只想替换该代码中的其他内容。在我的情况下是BB到XX

AA/BB
AA/BB1
AA/BB-1
BB
BB1
BB-1

我试图用这种简单的形式来regexp_replace

查询

select regexp_replace('AA/BB','BB','XX') from dual; 

结果:

AA/XX

查询

select regexp_replace('AA/BB-1','XX') from dual; 

结果:

AA/XX-1

它可以正常工作,但可能会在斜杠AA也变为BB之前发生,但是这次不应该替换它,但仍适用于其余代码

select regexp_replace('BB/BB','XX') from dual; 

当然可以给我XX / XX,但我想达到BB / XX等。

解决方法

也许我们可以这样表述:替换'BB'之后没有的'/'

regexp_replace(myval,'BB($|[^/])','XX\1')

Demo on DB Fiddle

with t as (
    select 'AA/BB' myval from dual 
    union all select 'AA/BB1' from dual
    union all select 'AA/BB-1' from dual
    union all select 'BB' from dual
    union all select 'BB' from dual
    union all select 'BB1' from dual
    union all select 'BB-1' from dual
    union all select 'BB/BB' from dual
)
select myval,regexp_replace(myval,'XX\1') newval from t
MYVAL   | NEWVAL 
:------ | :------
AA/BB   | AA/XX  
AA/BB1  | AA/XX1 
AA/BB-1 | AA/XX-1
BB      | XX     
BB      | XX     
BB1     | XX1    
BB-1    | XX-1   
BB/BB   | BB/XX  
,

或者,请参见代码中的注释,其中“从位置开始”的含义为:如果那里有超过1个BB子字符串,请从{{1}中的第二个BB的位置开始}。否则,请从MYVAL的开头开始。

@GMB,感谢您提供示例数据。

MYVAL

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...