Oracle使用REGEXP_SUBSTR返回括号内的值

时间:2013-05-22 20:38:59

标签: regex oracle

我们在数据库中存储了一些应用程序参数,我正在寻找一种通过SQL提取/解析参数的方法。这些数据的一个例子如下:

PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]

因此,例如,投影的值将是“横向”,引号将是其中的一部分。我认为最简单的方法是使用REGEXP_SUBSTR函数。这是我目前的尝试:

SELECT REGEXP_SUBSTR('PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]', 'PROJECTION\[[^][]*\]') FROM dual;

虽然返回:

PROJECTION["Transverse"]

我意识到我可以删除不需要的字符,但我很好奇是否有人可以推荐任何REGEX调整,以便SELECT查询返回简单的“Transverse”这个例子。投影并不总是我想要拉出来的,例如,如果我想要Unit那么我需要返回:“Two”,2

这是使用Oracle数据库10g企业版10.2.0.5.0 - 64位

3 个答案:

答案 0 :(得分:1)

SELECT REGEXP_REPLACE(
   'PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]',
   '^.*PROJECTION\[(.+?)\].*$', '\1'
) FROM dual

答案 1 :(得分:0)

您可以使用反向引用(\1\2等)。基本上你想匹配字符串的三个部分:

  1. PROJECTION参数值之前的所有内容。
  2. PROJECTION参数值。
  3. PROJECTION参数值之后的所有内容。
  4. 这三个匹配的正则表达式必须在括号内,以便反向引用。我想出的正则表达式是:

    (.*PROJECTION\[")(.+)("].*)
                         ^^^^^^ Backref 3: everything after the PROJECTION parameter value
                     ^^^^ Backref 2: the PROJECTION parameter value
    ^^^^^^^^^^^^^^^^^ Backref 1: everything before the PROJECTION parameter value
    

    然后只需用backref 2替换,忽略1和3:

    REGEXP_REPLACE(expr, '(.*PROJECTION\[")(.+)("].*)', '\2')
    

答案 2 :(得分:0)

Files.fileTreeTraverser()