postgresql regexp_replace с точками - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу заменить строки между @ и . в адресе электронной почты при выборе из PostgreSQL.

, пока я могу заменить @ и все после него

select REGEXP_REPLACE(contactemail, '@(.*)(\.)?', '@xxx') from customer;

1 Ответ

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

Ваш шаблон @(.*)(\.)? соответствует @, затем захватывает в Группу 1 любые 0+ символов, кроме символов разрыва строки, как можно больше, и затем пытается сопоставить необязательную точку, т.е. этот (\.)? никогда не будет соответствоватьлюбой текст, но пустой. Неудивительно, что вы сопоставляете все после @ с шаблоном.

Вам необходимо использовать

SELECT REGEXP_REPLACE(col, '@[^.]*\.', '@xxx.')

Или, если вы хотите удалить только часть текста между ближайший @ и .:

SELECT REGEXP_REPLACE(col, '@[^@.]*\.', '@xxx.')

Шаблон соответствует

  • @ - @ char
  • [^.]* - ноль или более вхождений любого символа, но .
  • \. - точка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...