REGEXP_SUBSTR:正则表达式中的括号不匹配错误

问题描述

背景:我有 3 列:项目、描述、描述 2。一个项目可以用另一个项目编号替换,并在 description 或 description2 列中指明。描述和描述 2 包含对项目的描述,并且只要该项目有替换项目,描述或描述 2 就可以包含一些常用短语以指示使用新的项目编号。示例:REPLACE W 12345 OLD 54321。所以我有一个第 4 列,我想将 12345 数字提取到其中。

使用的代码如下。基本上我发现如果有一个新的项目编号要使用,它总是会像这样设置:常用短语后跟一个空格,然后是项目编号。另一个例子是:见 12345。

我不得不使用带有空格的 concat,因为描述字段限制为 30 个字符,有时描述会使用整个 30 个字符,最后是项目替换编号。我的代码看起来停在数字后面的空白处。每当我添加 concat 片段时,都会出现以下错误

ORA-12725:正则表达式中的括号不匹配 12725. 00000 - “正则表达式中不匹配的括号” *原因:正则表达式没有平衡括号。 *行动:确保括号正确平衡。

我已经检查了几次,但找不到任何不匹配的括号。知道为什么我会收到此错误吗?我一次注释掉一行,它在 REPLACE W 上出错。虽然,当我跑的时候:

REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(REPLACE W )(\d+)(\s)'),'(\d+)') it seems to run fine. I need to have the case when piece with it though.

when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SEE TEMP )(\d+)(\s)'),'(\d+)') is not null then REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(\d+)')

when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)') is not null then REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')

when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(ITEM )(\d+)(\s)'),'(NEW )(\d+)(\s)'),'(REPL W )(\d+)(\s)'),'(\d+)')

--when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(\d+)')

--when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(REPLACE W (\d+)(\s)'),'(REPLACE W/)(\d+)(\s)'),'(SEE )(\d+)(\s)'),'(SEE RX )(\d+)(\s)'),'(SEE SUB )(\d+)(\s)'),'(SUB TO )(\d+)(\s)'),'(TEMP HOLD )(\d+)(\s)'),'(\d+)')*/

我无权访问 oracle sql,所以我无法从文本编辑器中获取它。欣赏这些想法。

解决方法

你的 SQL 看起来不错

SQL> create table t ( description varchar2(10),description2 varchar2(10));

Table created.

SQL>
SQL> select
  2  case
  3  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SEE TEMP )(\d+)(\s)'),'(\d+)') is not null then REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(\d+)')
  4  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)') is not null then REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
  5  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(ITEM )(\d+)(\s)'),'(\d+)')
  6  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
  7  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(NEW )(\d+)(\s)'),'(\d+)')
  8  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
  9  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(REPL W )(\d+)(\s)'),'(\d+)')
 10  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 11  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(REPLACE W )(\d+)(\s)'),'(\d+)')
 12  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(REPLACE W (\d+)(\s)'),'(\d+)')
 13  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(REPLACE W/)(\d+)(\s)'),'(\d+)')
 14  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 15  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SEE )(\d+)(\s)'),'(\d+)')
 16  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 17  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SEE RX )(\d+)(\s)'),'(\d+)')
 18  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 19  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SEE SUB )(\d+)(\s)'),'(\d+)')
 20  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 21  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(SUB TO )(\d+)(\s)'),'(\d+)')
 22  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 23  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description||' ','(TEMP HOLD )(\d+)(\s)'),'(\d+)')
 24  when REGEXP_SUBSTR(REGEXP_SUBSTR(i.description2||' ','(\d+)')
 25  end
 26  from t i;

no rows selected

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...