regexp_replace for oracle 替换 https 不工作

regexp_replace for oracle to replace https not working

有人知道为什么 RegExp 可以在模拟器上运行但不能在 oracle 上运行吗?

应将 // 替换为 / 除了 https://

SELECT regexp_replace (url_link,'(?<!https:)\/\/','\/'), url_link
FROM URL_TABLE;

变化

https://pet/green//car/plane//garden

https://pate/gren/car/plane/gardn

谢谢

不是很聪明,但工作(有点):

SQL> with test as (select 'https://pet/green//car/plane//garden' url from dual)
  2  --
  3  select
  4    regexp_replace(url, '//', '/', 8) res1,
  5    regexp_replace(url, '//', '/', instr(url, '//') + 1) res2
  6  from test;

RES1                               RES2
---------------------------------- ----------------------------------
https://pet/green/car/plane/garden https://pet/green/car/plane/garden

SQL>

[将 Gary_W 的建议添加为 RES2]

对 REGEXPR_REPLACE 模式字符串中 // 之前的字符使用 Non-Colon 字符列表

这与 Littlefoot 的解决方案相同,只是要确保我们不会将第一个 // 替换为前面的 :

我们只是表明我们不想与 non-colon 字符列表匹配,[^:],然后将其封装在一个字符组中(将其放在括号中)。

在我们的替换字符串中,我们只是用 </code> 引用这个字符组,它翻译为第一个字符组。</p> <pre><code>SCOTT@db>SELECT 2 regexp_replace('https://pet/green//car/plane//garden','([^:])//','/') http_url 3 FROM 4 dual; http_url ------------------------------------ https://pet/green/car/plane/garden


附录

作为这个模式匹配问题的旁注,如果 Oracle 的正则表达式实现确实具有(负)先行或(负)后向,那肯定会很好。

下面是 Vim 的正则表达式匹配问题的示例:

\(https:\|http:\)\@<! = "https:" 或 "http:" 使用交替运算符

的负面回顾

\/\/ = 双斜线模式

我们看到匹配项 // 以蓝色突出显示