我正在尝试在regexp_substr()中编写一个正则表达式。

例如,我有一个字符串DA.*BLK,我想提取AB之间的所有内容。我现在正在做的是使用

replace(replace(regexp_substr(target_column,'A.*B'),'A',''),'B','')`

然后我得到介于两者之间的任何东西。

但是我认为这种方式可能并不高效,而且不够优雅。我也尝试在其中使用?=,但看来Oracle不支持此类子句。
有人可以让我知道实现目标的更好方法吗?非常感谢你!

最佳答案

使用提取组

REGEXP_SUBSTR('DASOMETHINGBLK','DA(.*)BLK', 1,1,NULL,1)
               --                           ^ ^      ^
               --starting from first, find first     1st match bet'n ()

http://sqlfiddle.com/#!4/97eade/967

07-25 22:06