我们在数据库中存储了一些应用程序参数,我正在寻找一种通过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位
答案 0 :(得分:1)
SELECT REGEXP_REPLACE(
'PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]',
'^.*PROJECTION\[(.+?)\].*$', '\1'
) FROM dual
答案 1 :(得分:0)
您可以使用反向引用(\1
,\2
等)。基本上你想匹配字符串的三个部分:
PROJECTION
参数值之前的所有内容。PROJECTION
参数值。PROJECTION
参数值之后的所有内容。这三个匹配的正则表达式必须在括号内,以便反向引用。我想出的正则表达式是:
(.*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()