2014-03-26 63 views
1

我有許多字符串需要tokenise - 一個示例如下所示。如何使用Oracle 10g REGEXP_SUBSTR使用字符串分隔符提取字符串

NAME:ALAN GREYINTACC:999ACCOUNT:12345678SORT:654321REF:ABC 7654321 

我可以使用的INSTRSUBSTR的組合來做到這一點,但我希望,有可能是使用REGEXP_SUBSTR執行此更簡單的方法。

我看過錨,但只能找到參考起始字符串^和結束字符串$

有沒有這樣的事情作爲'在字符串'錨?例如如果我從這個字符串想要的帳號,我想要的一切ACCOUNT:SORT:

任何答覆讚賞之前,

非常感謝

回答

2

使用REGEXP_REPLACE作此用途。這可以幫助您從匹配中捕獲組(如\1),並用它替換。看下面的例子:

SELECT 
    REGEXP_REPLACE('NAME:ALAN GREYINTACC:999ACCOUNT:12345678SORT:654321REF:ABC 7654321', 
        '.*ACCOUNT:(.+?)SORT.*', 
        '\1') "SOME_VALUE" 
FROM DUAL; 
+0

我只是試圖解決這個問題。 REGEXP_SUBSTR不允許捕獲匹配,所以REGEXP_REPLACE是要走的路。 +1。 – Drumbeg

0

每說有沒有「字符串」主播:有模式,你的正則表達式可以匹配。即使是「錨點」,也是真正匹配線路的結尾和開始。

此正則表達式,例如,將匹配ACCOUNT:隨後任何事情,隨後SORT:和存儲所述第一捕獲組在這個「什麼」(與括號中的正則表達式表示)

ACCOUNT:(.*?)SORT: 
  • .是任意字符(除了換行符)
  • *是量詞,意味着0次或多次
  • ?使得量詞懶惰(將在t停止他最短的匹配,如果有用的話你的數據是ACCOUNT:123SORT:456SORT:789,你只需要選擇123,不123SORT:456
+1

謝謝羅賓。不幸的是,由於我提供的數據的狀態,ACCOUNT和SORT之間可能有很多東西:所以我不能只查找數字。 – user3463817

+0

@ user3463817:我明白了。我相應地更新了我的答案,但我並不熟悉oracle的正則表達式,我不知道如何顯示捕獲的值。祝你好運 – Robin

+0

玩過REGEXP_SUBSTR後,我無法找到實際使用捕獲的方法。正如Sabuj所說,REGEXP_REPLACE是必需的。 – Drumbeg

相關問題