Oracle REGEXP_LIKE找不到数据

oknwwptz  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(188)

我在Oracle中遇到了REGEXP_LIKE问题。在表CLOB列中有以下数据:

some text 1{000000}some text 2{000000}some text 3{000error001}some text 4{000001}

关键是找到包含无效数据的{000 error 001}。我尝试了下面的正则表达式,它在在线正则表达式测试工具中工作得很好:

\{(?:.(?!\}))+\D+(?:.*?)\}

但是当它被添加到select语句时:

SELECT REGEXP_INSTR('some text 1{000000}some text 2{000000}some text 3{000error001}some text 4{000001}', '\{(?:.(?!\}))+\D+(?:.*?)\}') FROM DUAL;

它根本不工作(返回0)。
知道为什么吗?
我尝试了regex模式的多个组合,但只有这一个显示正确的结果,不幸的是,只有在regexp在线测试工具中。

fgw7neuy

fgw7neuy1#

用于查找花括号之间的字符串的正则表达式,这些字符串至少包含一个可使用的非数字字符

\{[0-9]*[^0-9{}][^{}]*}
  • 详情 *:
  • \{-一个{字符
  • [0-9]*-零位或多位
  • [^0-9{}]-数字以外的字符,{/}
  • [^{}]*-除了{}之外的零个或多个字符
  • }-一个}字符。

请参见this regex demo
实际上,您甚至可以使用\{[^{}]*[^0-9{}][^{}]*},但由于有效字符串只包含花括号内的数字,因此上面的表达式很好,甚至更有效。

相关问题