Маскирование значения параметра строки запроса с помощью Postgres regexp_replace - PullRequest
0 голосов
/ 02 июля 2018

Я хочу замаскировать названия фильмов с помощью XXXXXXXX в столбце таблицы PostgreSQL. Содержимое столбца выглядит примерно так:

hollywood_genre_movieTitle0=The watergate&categorey=blabla&hollywood_genre_movieTitle1=Terminator&hollywood_genre_movieTitle2=Spartacus&hollywood_genre_movieTitle3=John Wayne and the Indians&categorey=blabla&hollywood_genre_movieTitle4=Start Trek&hollywood_genre_movieTitle5=ET&categorey=blabla

И я хотел бы замаскировать заголовки (за шаблоном hollywood_genre_movieTitle\d), используя функцию regexp_replace

regexp_replace('(hollywood_genre_movieTitle\d+=)(.*?)(&?)', '\1XXXXXXXX\3', 'g')

Это просто заменяет первое вхождение заголовка и обрезает строку. Короче говоря, это выражение не делает то, что я хочу. Я хотел бы, чтобы названия всех фильмов были заменены на XXXXXXXX.

Может кто-нибудь помочь мне решить это?

1 Ответ

0 голосов
/ 02 июля 2018

Регулярное выражение не работает, потому что (.*?)(&?) соответствует пустой строке или & попадает в группу 3, если сразу следует шаблону hollywood_genre_movieTitle\d+=.

Вам необходимо использовать отрицательный класс символов [^&] и квантификатор +, чтобы соответствовать любому 1 или более символам, отличным от & после шаблона hollywood_genre_movieTitle\d+=.

SELECT regexp_replace(
            'hollywood_genre_movieTitle0=The watergate&categorey=blabla&hollywood_genre_movieTitle1=Terminator&hollywood_genre_movieTitle2=Spartacus&hollywood_genre_movieTitle3=John Wayne and the Indians&categorey=blabla&hollywood_genre_movieTitle4=Start Trek&hollywood_genre_movieTitle5=ET&categorey=blabla',
            '(hollywood_genre_movieTitle\d+=)[^&]+', 
            '\1XXXXXXXX', 
            'g') 

См. Онлайн-демонстрацию .

Детали

  • (hollywood_genre_movieTitle\d+=) - Группа захвата 1:
    • hollywood_genre_movieTitle - подстрока
    • \d+= - 1 или более цифр и = после них
  • [^&]+ - 1 или более символов, отличных от &.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...