我有以下查询:
SELECT DISTINCT A.REZ FROM
(
SELECT REGEXP_SUBSTR(P_EQUATION, '([A-Z|a-z|0-9]+)\{([0-9|\+|\-| |\*|\/\)\(]+)\}#([A-Z|a-z|0-9|_]+)#',1, LEVEL) AS REZ FROM DUAL
CONNECT BY REGEXP_SUBSTR(P_EQUATION, '([A-Z|a-z|0-9]+)\{([0-9|\+|\-| |\*|\/\)\(]+)\}#([A-Z|a-z|0-9|_]+)#',1, LEVEL) IS NOT NULL
) A;
如果我提供以下输入:
P_EQUATION := 'A123{(01+02)*2}#ACCOUNT_BALANCE# + B123{(20+10)/20}#ACCOUNT_BALANCE#';
它给了我以下内容:
REZ
-------------------------------------
A123{(01+02)*2}#ACCOUNT_BALANCE#
B123{(20+10)/20}#ACCOUNT_BALANCE#
但是,尽管减号包含在模式中,但是如果我将其添加到大括号中,它将不再将文本识别为匹配项!
前任:
P_EQUATION := 'A123{(01-02)*2}#ACCOUNT_BALANCE#';
我无法找到解决方案,这让我感到震惊,尤其是当我尝试单独匹配减号时,它是可行的;如果我尝试单独匹配数字,则它也可以:(
Oracle似乎正在使用POSIX样式正则表达式:https : //docs.oracle.com/cd/B12037_01/server.101/b10759/ap_posix001.htm#i690819
反斜杠不是POSIX括号表达式中的元字符。因此,在POSIX中,正则表达式
[\d]
匹配a\
或ad
反斜杠可能把它弄乱了,这不是必需的。您还没有意识到这|
是char类中的文字(注释也指出了该文字)。我已经解决了这些问题,然后将其-
移到char类的开头,从而可以将其解释为文字。
干得好:
([A-Za-z0-9]+)\{([-0-9+ */)(]+)\}#([A-Za-z0-9_]+)#
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句