Oracle REGEXP_SUBSTR无法与我的模式一起使用

相同

我有以下查询:

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

> http://www.regular-expressions.info/posixbrackets.html

反斜杠可能把它弄乱了,这不是必需的。您还没有意识到这|是char类中的文字(注释也指出了该文字)。我已经解决了这些问题,然后将其-移到char类的开头,从而可以将其解释为文字。

干得好:

([A-Za-z0-9]+)\{([-0-9+ */)(]+)\}#([A-Za-z0-9_]+)#

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Oracle SQL regexp_substr

oracle中的REGEXP_SUBSTR

oracle regexp_substr用于模式的随机出现

如何使用 oracle REGEXP_SUBSTR 提取特定的 json 值?

oracle中REGEXP_SUBSTR中的混乱

Oracle REGEXP_SUBSTR 拆分 URL

regexp_substr 与 Oracle 后面的外观

关于 Regexp_substr 的 Oracle 查询

Oracle:instr+substr 代替 regexp_substr

在sql oracle中使用regexp_substr在特定单词之后获取单词

在 Oracle 中使用 REGEXP_SUBSTR 从字符串中提取 ID 号

如何使用 HQL 将 oracle regexp_substr 转换为 PostgreSQL

使用Oracle REGEXP_SUBSTR提取由下划线分隔的大写数据

使用 Oracle 的字符串的子串(SUBSTRING 或 REGEXP_SUBSTR) 当有多个 Matches 时

使用 Oracle 的字符串的子字符串(SUBSTRING 或 REGEXP_SUBSTR)

php implode无法与sql oracle一起使用

Oracle REGEXP_SUBSTR 返回 NULL 作为值

用于 ORACLE DB 查询中的分号的 Regexp_Substr

Oracle:按级别和regexp_substr连接

Oracle SQL regexp_substr数字提取行为

验证 Oracle REGEXP_SUBSTR 中的子表达式

Regexp_substr 在某些字符集后提取 Oracle

ORACLE REGEXP_SUBSTR与方括号之间的数字匹配

Oracle 11G REGEXP_SUBSTR函数

Oracle REGEXP_SUBSTR 将不匹配点字符

Oracle REGEXP_SUBSTR忽略字符的第一次出现,但包括第二次出现

如何在Oracle中的SQL中使用REGEXP_SUBSTR用自定义消息替换空插槽

使用regexp_substr在Oracle中按空格和字符分隔字符串作为定界符

使用 REGEXP_SUBSTR 或 SUBSTR 函数在 Oracle SQL 中“第一个 _(下划线)后开始”和“第二个 _(下划线)结束”中查找子字符串