我的项目中有查询,而REGEXP_REPLACE
我试图通过搜索找到它是如何工作的,但我发现它像
w +匹配单词字符(即字母数字或下划线) (_)字符)。
但无法找到'"\w+\":'
使用这些""
的原因以及'{|}|"',''
UPDATE (SELECT data,data_value FROM TEMP) t
SET t.DATA_VALUE=REGEXP_REPLACE(REGEXP_REPLACE(t.data, '"\w+\":',''),'{|}|"','');
你能告诉我它是如何运作的吗?
答案 0 :(得分:1)
这似乎是一个正则表达式,用于从JSON字符串中剥离密钥和括起括号 - 不幸的是,如果是这种情况,那么它在所有情况下都不起作用。
正则表达式
'"\w+\":'
将匹配:
"
双引号; \w+
一个或多个字(a-z
或A-Z
或0-9
或_
)字符; \"
另一个双引号 - 注意:\
字符不是必需的;然后:
冒号。所以:
REGEXP_REPLACE(
'{"key":"value","key2":"value with \"quote"}',
'"\w+":', -- Pattern matched
'' -- Replacement string
)
将输出:
{"value","value with \"quote"}
第二种模式{|}|"
将匹配{
或}
或"
字符(并且可能已被等效地写为[{}"]
)这样:
REGEXP_REPLACE(
'{"value","value with \"quote"}',
'{|}|"', -- Pattern matched
'' -- Replacement string
)
将输出:
value,value with \quote
哪个好,直到(就像我的例子)你在值字符串中有一个转义双引号(或花括号);在这种情况下,那些也将被剥离,留下逃脱角色。
(注意:您通常不会找到此内容,但可以在密钥中包含转义引号。因此,{"keywith\":quote":"value"}
会被{quote":"value"}
替换为quote:value
,然后REGEXP_REPLACE(
'{"key":"value","key2":"value with \"quote","keywith\":quote":"value with \"{}"}',
'^{|"(\\"|[^"])+":(")?((\\"|[^"])+?)\2((,)|})',
'\3\6'
)
不是预期的输出。)
如果您正在尝试解析JSON(Oracle之前的版本12),那么您可以使用:
value,value with \"quote,value with \"{}
哪个输出:
SELECT *
FROM JSON_TABLE(
'{"key":"value","key2":"value with \"quote","keywith\":quote":"value with \"{}"}',
'$.*' NULL ON ERROR
COLUMNS (
value VARCHAR2(4000) PATH '$'
)
)
或者在Oracle 12中,您可以这样做:
VALUE
-----------------
value
value with "quote
value with "{}
哪个输出:
[
{ "FirstName": "John",
"LastName": "Parker",
"Age": "23",
"Cat": "23g",
"SOP": "Active"
},
{ "FirstName": "Rose",
"LastName": "Jackson",
"Age": "44",
"Cat": "44g",
"SOP": "InActive"
}
]
答案 1 :(得分:0)
example ::: REGEXP_REPLACE(string,pattern [,replacement_string [,start_position [,nth_appearance [,match_parameter]]]])
|是或者(可以多于一个替代),至少在{n,}至少n次
https://www.techonthenet.com/oracle/functions/regexp_replace.php "我收到了我的信息"
'" \ W + \":'为什么这些""使用的是' {|} |"','' 匹配一个单词字符(\ w)一次或多次(+)这必须搞砸它通过放置\"它错过了正确数量的近括号。 w + \" 他们允许"要显示。此表达式将一个表达式更改,然后将其用作下一个更改的基础。祝你好运。一旦你掌握了基础知识,正则表达式就不会太糟糕,非常直观。