用于oracle的regexp_replace替换https无法正常工作

aym*_*one 4 oracle regexp-replace

有谁知道为什么RegExp可以在模拟器上运行但在oracle中却没有?

应该用https://替换// with/except

SELECT regexp_replace (url_link,'(?<!https:)\/\/','\/'), url_link
FROM URL_TABLE;
Run Code Online (Sandbox Code Playgroud)

变化

https://pet/green//car/plane//garden
Run Code Online (Sandbox Code Playgroud)

https://pate/gren/car/plane/gardn
Run Code Online (Sandbox Code Playgroud)

谢谢

Pat*_*con 6

//在REGEXPR_REPLACE模式字符串中使用前缀字符的非冒号字符列表

这是相同的,只是确保我们不会替换第一Littlefoot的解决方案//:之前.

我们只是表明我们不希望与非冒号字符列表匹配[^:],然后将其封装在一个字符组中(将其放在一个画面中).

在我们的替换字符串中,我们只引用这个字符组,\1并将其转换为第一个字符组.

SCOTT@db>SELECT
  2      regexp_replace('https://pet/green//car/plane//garden','([^:])//','\1/')  http_url
  3  FROM
  4      dual;

http_url                                 
------------------------------------
https://pet/green/car/plane/garden
Run Code Online (Sandbox Code Playgroud)

附录

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

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

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

\/\/ =双向前削减模式

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

在此输入图像描述