Найти и заменить SQL-запрос на Regex - PullRequest
1 голос
/ 11 ноября 2019

У меня есть несколько ссылок в базе данных, например:

<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>

Я не совсем разработчик, и я действительно ненавижу регулярное выражение, потому что я его не понимаю. Не могли бы вы помочь мне решить эту проблему, пожалуйста?

1 Ответ

0 голосов
/ 13 ноября 2019

Вы можете сделать это с помощью функций регулярных выражений, хотя это немного сложно, потому что MySQL / MariaDB не поддерживает захват группы.

Вы можете идентифицировать часть строки, которую нужно заменить на регулярное выражение 'href="[^"]+"'.

С другой стороны, вы можете захватить целевой URL с помощью '>[^<]+' (это означает: все символы после '>' до достижения '<'). Таким образом, это дает вам строку замены:

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

Конечное выражение:

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

Демонстрация на 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> |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...