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:" 使用交替运算符
的负面回顾
\/\/
= 双斜线模式
我们看到匹配项 //
以蓝色突出显示
有人知道为什么 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:" 使用交替运算符
\/\/
= 双斜线模式
我们看到匹配项 //
以蓝色突出显示