我试图让以下Regex表达式与Oracle SQL一起使用:
select regexp_replace(' "abc_78": 123, ', '.*?abc.*?: (.*?),.*', '\1') from dual;
select regexp_replace(' "abc_78": 123, "def_79": [', '.*?abc.*?: (.*?),', '\1') from dual;
第一个返回"123"
(我认为是正确的),而第二个返回"123 "def_79": ["
。
这里涉及的问题是什么?一个糟糕的正则表达式或Oracle的一些奇怪的功能?在针对Sublime Text进行尝试时,正则表达式似乎运行良好。我直接在Oracle SQL Developer上运行此查询。
由于
答案 0 :(得分:1)
正在正确替换。
select regexp_replace(' "abc_78": 123, "def_79": [', '.*?abc.*?: (.*?),', '\1') from dual;
首先:它(正则表达式引擎)找到'“abc_78”:123'其中123是组$ 1。 然后用组1替换'abc_78:123',即123。
你在那些正则表达式模式中几乎没有差异,如:
'.*?abc.*?: (.*?),.*', '\1') from dual;
'.*?abc.*?: (.*?),', '\1') from dual;
缺少。*第二种模式。
如果您想从此字符串中检索123,最好使用regex_substr
select regexp_substr(' "abc_78": 123, ','\d+',1,2) from dual;