2014-03-26 64 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

相关问题