Oracle regex_replace 不排除某些值
Oracle regex_replace is not excluding certain values
我有一个 select 声明 regex_replace。
SELECT REGEXP_REPLACE((REGEXP_REPLACE(nvl(d.text_i, d.text),'[^=|]+(\||$)')),'^'||24466||'=|\|'
||24466||'=', '||'||24466||'='||'C1')
FROM table_infor d
where d.tab_id = 13095;
列text_i和文本的值如下
text text_i
26736=A||||24470=B1||||24467=||||24466=V1 (null)
26736,24470,24467,24466 (null)
26736=A||||24470=||||24467=||||24466=V1 (null)
26736=||||24470=B1||||24467=B||||24466=V1 (null)
(null) A
123 (null)
所以我想打印:
26736=||||||24470=||||||24467=|||||||24466=C1
2673,24470,24467,24466
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
A
123
但我目前得到的是
26736=||||||24470=||||||24467=|||||||24466=C1
(null)
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
所以我的 regexp_replace 所有具有 =||||| 的值的逻辑有效,但对于其他值,它不是 selecting 它们。我希望其他值按原样 selected。
'[^=|]+(\||$)'
模式匹配除 =
和 |
之外的任何一个或多个字符,直到 |
或字符串结尾,如果它消耗管道存在。这意味着,比赛将尽快开始。您希望匹配仅在 =
符号出现时才开始。
因此,将其包含在第一个正则表达式中并替换为 =
以将其放回去:
REGEXP_REPLACE(nvl(d.text_i, d.text),'=[^=|]+(\||$)', '=')
参见 this regex demo。
我有一个 select 声明 regex_replace。
SELECT REGEXP_REPLACE((REGEXP_REPLACE(nvl(d.text_i, d.text),'[^=|]+(\||$)')),'^'||24466||'=|\|'
||24466||'=', '||'||24466||'='||'C1')
FROM table_infor d
where d.tab_id = 13095;
列text_i和文本的值如下
text text_i
26736=A||||24470=B1||||24467=||||24466=V1 (null)
26736,24470,24467,24466 (null)
26736=A||||24470=||||24467=||||24466=V1 (null)
26736=||||24470=B1||||24467=B||||24466=V1 (null)
(null) A
123 (null)
所以我想打印:
26736=||||||24470=||||||24467=|||||||24466=C1
2673,24470,24467,24466
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
A
123
但我目前得到的是
26736=||||||24470=||||||24467=|||||||24466=C1
(null)
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
所以我的 regexp_replace 所有具有 =||||| 的值的逻辑有效,但对于其他值,它不是 selecting 它们。我希望其他值按原样 selected。
'[^=|]+(\||$)'
模式匹配除 =
和 |
之外的任何一个或多个字符,直到 |
或字符串结尾,如果它消耗管道存在。这意味着,比赛将尽快开始。您希望匹配仅在 =
符号出现时才开始。
因此,将其包含在第一个正则表达式中并替换为 =
以将其放回去:
REGEXP_REPLACE(nvl(d.text_i, d.text),'=[^=|]+(\||$)', '=')
参见 this regex demo。