使用正则表达式查找和替换SQL查询

时间:2019-11-11 01:10:05

标签: php mysql sql regex

我在数据库中有一些这样的链接:

<a href="https://example.com/full/?api=0aca610f4a9983fc1fa30brs6c302f970ae87c29da&amp;url=aHR0cHM6Ly93d3c0Mi56aXBwfseXNoYXJlLmNvbS92L1IwVlNwZkk4L2ZpbGUuaHRtbA==&amp;type=2" target="_blank" rel="noreferrer noopener">www.example.net/v/R0V82dSpfI8/file.html</a>

<a href="https://example.com/full/?api=sd4a5sdf540c1fa30b6c302f9704a6sadf&amp;url=asdfa54asd5fa5sdfa8dRcFFcafasdf==&amp;type=2" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a>

我需要一个“查找并替换” SQL查询,该查询将 找到锚文本,添加https://并将其放在href标记中。

基于第二个示例,最终的HTML应该是这样的:

<a href="https://example.org/000hcwoc0kcwy1/545da45a.rar.html" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a>

我不完全是一名开发人员,我真的讨厌regex,因为我不理解它。您能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式函数进行此操作,尽管它有点复杂,因为MySQL / MariaDB不支持捕获组。

您可以确定需要用正则表达式'href="[^"]+"'替换的字符串部分。

另一方面,您可以使用'>[^<]+'捕获目标URL(这意味着:'>'之后的所有字符,直到满足'<')。因此,这为您提供了替换字符串:

substring(regexp_substr(link, '>[^<]+') from 2)

最终表达:

regexp_replace(
    link, 
    'href="[^"]+"',
    concat('hef="https://', substring(regexp_substr(link, '>[^<]+') from 2), '"')
)

Demo on DB Fiddle

原始数据:

select link from mytable;
| link                                                                                                                                                                                                                                                               |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a href="https://example.com/full/?api=0aca610f4a9983fc1fa30brs6c302f970ae87c29da&amp;url=aHR0cHM6Ly93d3c0Mi56aXBwfseXNoYXJlLmNvbS92L1IwVlNwZkk4L2ZpbGUuaHRtbA==&amp;type=2" target="_blank" rel="noreferrer noopener">www.example.net/v/R0V82dSpfI8/file.html</a> |
| <a href="https://example.com/full/?api=sd4a5sdf540c1fa30b6c302f9704a6sadf&amp;url=asdfa54asd5fa5sdfa8dRcFFcafasdf==&amp;type=2" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a>                                         |

查询:

select 
    regexp_replace(
        link, 
        'href="[^"]+"',
        concat('hef="https://', substring(regexp_substr(link, '>[^<]+') from 2), '"')
    ) new_link
from mytable
| new_link                                                                                                                                                 |
| :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a hef="https://www.example.net/v/R0V82dSpfI8/file.html" target="_blank" rel="noreferrer noopener">www.example.net/v/R0V82dSpfI8/file.html</a>           |
| <a hef="https://example.org/000hcwoc0kcwy1/545da45a.rar.html" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a> |