2016-11-30 24 views
-2

我试图提取Oracle中插入符号标志之间的值的字段的提取BETWEEN CARET正负号值在Oracle

AAA_0^%CELEBRTE%^S~AAA_2^TOP^S~simpLE^True^S~AAA1^NICE^S~ 

输出

^%CELEBRTE% TOP True NICE 

任何帮助将是赞赏

+4

嘛,你尝试过什么? – OldProgrammer

+0

regexp_substr将是一个起点。 –

回答

0

此作品:

SQL> SELECT regexp_replace('AAA_0^%CELEBRTE%^S~AAA_2^TOP^S~simpLE^True^S~AAA1^NICE^S~' 
    2      , '^[^^]*\^([^^]*)\^[^^]*\^([^^]*)\^[^^]*\^([^^]*)\^[^^]*\^([^^]*)\^.*' 
    3      , '\1 \2 \3 \4') rr 
    4 FROM dual; 

RR 
------------------------ 
%CELEBRTE% TOP True NICE 

很显然,假设您只有4项要从数据中提取。

我不是正则表达式大师,作为我自己的练习,我用我认为是蛮力的方法解决了这个问题。我可以看到一组重复的模式来提取每个字符串,但是在我对此的研究中,似乎没有办法做到自动创建新捕获组的“重复反向引用”。如果其他人知道如何做到这一点,我会欢迎提供意见。

正则表达式的一对夫妇方便的资源:

A regular expression tester

A basic tutorial