Удалить значение base64 из строкового столбца в Postgres - PullRequest
1 голос
/ 05 марта 2019

У меня есть текстовый столбец в таблице, который содержит данные HTML вместе с изображением, представленным в кодировке base64.

Вот пример:

</p><p><span lang="EN">&nbsp;</span></p><p>
</p><p><img width="263" height="135" align="right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." alt=""></p>

Строка после base64:очень долгоЯ хочу удалить длинное строковое представление и заменить его словом "image".

Я попытался сопоставить шаблон с base64, и удалить все после этого до отметки " перед ключевым словом alt.Это работало в случаях, когда есть только появление значения base64.Когда есть многократные случаи, это терпит неудачу.

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

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Чтобы фактическая замена работала более одного раза, вам необходимо использовать флаг "global" для regexp_replace, например:

=# SELECT regexp_replace(E'\n\n...height="135" align="right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." alt="" ...\n<p></p>\n<p><img align="left" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." class="test" alt=""/>\n', '(data:[^,]+,)[^"]+', '\1<data>', 'g');
                                regexp_replace                                
------------------------------------------------------------------------------
                                                                             +
                                                                             +
 ...height="135" align="right" src="data:image/png;base64,<data>" alt="" ...  +
 <p></p>                                                                     +
 <p><img align="left" src="data:image/png;base64,<data>" class="test" alt=""/>+

(1 row)

... so: regexp_replace(my_html_column, '(data:[^,]+,)[^"]+', '\1<data>', 'g')

Это должно соответствовать и заменять все данные URI данного текста.

0 голосов
/ 05 марта 2019

Возможно, ваша проблема связана с жадным совпадением, и решение состоит в том, чтобы сопоставить что угодно, кроме " символов:

regexp_replace(col, 'base64,[^"]*', 'image')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...