Непонятные адреса электронной почты в предложении

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

Сообщение журнала может выглядеть следующим образом:

A lead was saved for [email protected], Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300

Я использую:

preg_replace('/(?<=.).(?=.*?@)|(?<=@.).*(?=\.com)/u', '*', $email);

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

A********************************@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300

Есть ли способ заставить его вернуться только в космос?

Таким образом, требуемый результат будет:

A lead was saved for ************@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300",

person Collins    schedule 12.12.2019    source источник
comment
обратите внимание, что почтовый адрес не обязательно должен заканчиваться на .com и в почтовом адресе могут быть пробелы. this."is a valid".address@mail   -  person Cid    schedule 12.12.2019
comment
хорошо, спасибо, я не знал, что в электронных письмах могут быть пробелы. плохо переосмыслить это.   -  person Collins    schedule 12.12.2019
comment
Как формируются журналы? Добавляется ли контент динамически с переменными, такими как почта, дата, сервис, дополнительные услуги и т. д.?   -  person Cid    schedule 12.12.2019
comment
У меня есть доступ только к простой текстовой строке, а не к функции, которая их создает   -  person Collins    schedule 12.12.2019
comment
этот ответ может помочь вам => stackoverflow.com/a/3345749/12490771   -  person Denis METRAL    schedule 12.12.2019
comment
Попробуйте preg_replace('/(\S+)@/m', '$2********', $sentence);   -  person Ersian    schedule 12.12.2019


Ответы (1)


Если цель состоит в том, чтобы скрыть/запутать адреса электронной почты, то никому не сообщайте, сколько символов преобразуется в звездочки.

Сопоставьте подстроки перед @ и замените их статическим количеством звездочек.

Код: (Демо)

$string = 'A lead was space" ema il "@emailadds.com saved for [email protected], Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300';

echo preg_replace('/(?:[^"\s@]+|"[^"]*")+(?=@[^\s.]+\.)/', '******', $string);

Выход:

A lead was ******@emailadds.com saved for ******@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300
person mickmackusa    schedule 05.01.2021