Почему мой оператор regexp_replace возвращает \ 0001? - PullRequest
0 голосов
/ 06 мая 2020

Моя postgresql инструкция:

update #{table} set email = regexp_replace(email, '.*(\d+).*', 'email_\1@foo.com', 'g') where email like '%@none.com'

Результат конвертирует "placeholder_1@none.com" в "email_\u0001@foo.com"

Где должно быть email_1@foo.com

Любое идеи, почему он возвращает то, что кажется юникодом?

1 Ответ

2 голосов
/ 06 мая 2020

Вы не даете здесь много информации, но, учитывая тот факт, что вы пометили эту проблему с помощью ruby -on-rails, я предполагаю, что это то, что вы используете.

Если Это так, и если запрос, который вы опубликовали выше, записан в вашем коде ruby в двойных кавычках, то причина в этом:

2.6.5 :005 > s = "email_\1@foo.com"
 => "email_\u0001@foo.com"

Строки с двойными кавычками допускают экранированные символы

\nnn восьмеричный битовый шаблон, где nnn - это 1-3 восьмеричные цифры ([0-7])

См. ruby строковые документы

Если вы хотите, чтобы в вашем запросе была фактическая backsla sh, вам нужно избежать backsla sh:

query = "update #{table} set email = regexp_replace(email, '.*(\\d+).*', 'email_\\1@foo.com', 'g') where email like '%@none.com'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...