Oracle 使用带有 oracle regexp_substr 的正则表达式提取 json 字段

Posted

技术标签:

【中文标题】Oracle 使用带有 oracle regexp_substr 的正则表达式提取 json 字段【英文标题】:Oracle extract json fields using regular expression with oracle regexp_substr 【发布时间】:2016-07-28 12:09:27 【问题描述】:

我正在使用带有 正则表达式 和 oracle regexp_substr 的 Oracle 查询从 JSON 字符串中提取 json 字段。

当我尝试获取代码键的值时,它运行良好及其值,但是当我尝试获取结果键的值时,它返回 null。

我正在使用这个查询:

select regexp_replace(regexp_substr('"code":"001","message":"success","transactionId":437,"results":"name":"osama"','"results":\s*("(\w| )*")', 1, level), '"results":\s*"((\w| )*)"', '\1', 1, 1) results
 from dual
connect by regexp_substr('"code":"001","message":"success","transactionId":437,"results":"name":"osama"', '"results":\s*("(\w| )*")', 1, level) is not null;

这个查询有什么问题? 谢谢

【问题讨论】:

那是因为 \w 只匹配字母数字字符。您尝试在结果中匹配的字符串是 - "name":"osama",它有大括号、双引号和冒号。你在使用 oracle 12c 吗? 谢谢@ruudvan,不,我没有使用oracle 12c,你能帮我正确表达吗 【参考方案1】:

允许不同的数据格式。这导致"name":"osama",我希望这是你想要的:

select regexp_replace(regexp_substr('"code":"001","message":"success","transactionId":437,"results":"name":"osama"','"results":\s*"(.*| )*"\', 1, level), '"results":\s*(\.*\)', '\1', 1, 1) results
 from dual
connect by regexp_substr('"code":"001","message":"success","transactionId":437,"results":"name":"osama"', '"results":\(.*)"\', 1, level) is not null;

【讨论】:

非常感谢您节省了我的时间,它运作良好

以上是关于Oracle 使用带有 oracle regexp_substr 的正则表达式提取 json 字段的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:带有 REGEXP_SUBSTR 表达式的插入查询很长(拆分字符串)

Oracle Regexp_like 使用 AND 子句

oracle - 使用带有 CLOB 参数的连接语句

Oracle中REGEXP_SUBSTR函数

oracle 正则表达式?=

oralce逗号分割变多行 Oracle中REGEXP SUBSTR函数