使用SQL,我试图用regexp更新列中的子字符串。
这是我的目标:
我的专栏中有HTML内容: 例如:
<a href="http://blabla.fr/blibli">Link1</a>
或包含多个链接的其他内容:
<p>BlaBlaBla</p>
<a href="http://blabla.fr/blibli">Link1</a>
<a href="http://blabla.fr/">Link2</a>
<a href="http://blabla.fr/test">Link3 </a>
(此示例表示整个字符串,选择结果不多) - 我想删除不包含'blibli'的网址中的'http://'
所以我做了这个查询
UPDATE my_table SET my_col = replace(my_col,'http://','') where not regexp_like(my_col,'http://^((?blibli).)*$')
但是只有当列包含至少一个像我的第一个例子的链接时才能工作。 如果列包含许多链接,则由于条件,它将不会更新任何内容。 (也许这么做很多步?) 我试着看看REGEXP_SUBSTR,但我想我也无法实现这一点。 第二个例子的期望结果是:
<p>BlaBlaBla</p>
<a href="http://blabla.fr/blibli">Link1</a>
<a href="blabla.fr/">Link2</a>
<a href="blabla.fr/test">Link3 </a>
感谢你给我的任何建议
答案 0 :(得分:1)
您可以使用REGEXP_REPLACE进行分组
UPDATE my_table SET my_col= REGEXP_REPLACE(my_col, 'href="(http://.*blibli[^"]*)|href="http://([^"])', 'href="\1')
您可以通过此链接http://rextester.com/HEMG60862
查看示例答案 1 :(得分:1)
与Trung的方法类似,但捕获两个(或者)匹配的组:
update my_table set my_col = regexp_replace(my_col,
'href="(http://[^"]*blibli[^"]*)"|href="http://([^"]*)"', 'href="\1\2"')
可选地使用where
子句来避免更新没有href
的行,比方说。
如何翻译样本值(在CTE中提供)的快速演示:
with my_table (id, my_col) as (
select 1, '<a href="http://blabla.fr/blibli">Link1</a>' from dual
union all select 2, '<a href="http://blabla.fr/blibli/abc">Link1</a>' from dual
union all select 3, '<a href="http://blabla.fr/xbliblix">Link1</a>' from dual
union all select 4, '<a href="http://blabla.fr/test">Link1</a>' from dual
union all select 5, '<p>BlaBlaBla</p>
<a href="http://blabla.fr/blibli">Link1</a>
<a href="http://blabla.fr/">Link2</a>
<a href="http://blabla.fr/test">Link3 </a>' from dual
)
select id, my_col, regexp_replace(my_col,
'href="(http://[^"]*blibli[^"]*)"|href="http://([^"]*)"',
'href="\1\2"') as result
from my_table;
ID MY_COL RESULT
---------- ------------------------------------------------ ------------------------------------------------
1 <a href="http://blabla.fr/blibli">Link1</a> <a href="http://blabla.fr/blibli">Link1</a>
2 <a href="http://blabla.fr/blibli/abc">Link1</a> <a href="http://blabla.fr/blibli/abc">Link1</a>
3 <a href="http://blabla.fr/xbliblix">Link1</a> <a href="http://blabla.fr/xbliblix">Link1</a>
4 <a href="http://blabla.fr/test">Link1</a> <a href="blabla.fr/test">Link1</a>
5 <p>BlaBlaBla</p> <p>BlaBlaBla</p>
<a href="http://blabla.fr/blibli">Link1</a> <a href="http://blabla.fr/blibli">Link1</a>
<a href="http://blabla.fr/">Link2</a> <a href="blabla.fr/">Link2</a>
<a href="http://blabla.fr/test">Link3 </a> <a href="blabla.fr/test">Link3 </a>
答案 2 :(得分:0)
你说“我想删除不包含'blibli'的网址中的'http://'”
为什么不使用这样的简单正则表达式?
{{1}}