如何使用Oracle 10g REGEXP_SUBSTR使用字符串分隔符提取字符串

时间:2014-03-26 12:03:22

标签: regex string oracle

我需要标记许多字符串 - 示例如下所示。

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

我可以使用INSTRSUBSTR的组合来执行此操作,但我希望可以使用REGEXP_SUBSTR更轻松地执行此操作。

我查看了锚点,但只能找到启动字符串^和结束字符串$的引用。

是否存在'in string'锚点?例如如果我想要此字符串中的帐号,我想要ACCOUNT:之后和SORT:之前的所有内容

任何回复都表示赞赏,

非常感谢

2 个答案:

答案 0 :(得分:2)

使用REGEXP_REPLACE代替此目的。这可以帮助您从匹配中捕获组(如\1)并将其替换使用。见下面的例子:

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

答案 1 :(得分:0)

每个说法都没有'in string'锚:你的正则表达式可以匹配模式。即使是'锚'也非常适合行尾和行首。

例如,此正则表达式将匹配ACCOUNT:后跟任何内容,然后匹配SORT:并将此“任何内容”存储在第一个捕获组中(在正则表达式中用括号表示)

ACCOUNT:(.*?)SORT:
  • .是任何字符(换行符除外)
  • *是量词,意味着0次或更多次
  • ?使量词处于延迟状态(将在最短的匹配时停止,如果您的数据为ACCOUNT:123SORT:456SORT:789并且您只想选择123,而不是123SORT:456)< / LI>