仅在字符串后面的字符串替换

时间:2016-09-13 12:57:29

标签: php regex encoding replace

背景是我想编码电子邮件user@domain.comuser#domain@com

$email = 'user@domain.com';
$email_encode = str_replace( '@' , '#' , $email ); // user#domain.com
$email_encode = str_replace( '.' , '@' , $email_encode ); // user#domain@com

这应该做对吗?但如果user类似于hello.world

它将获得hello@world#domain@com,因此这是错误的

hello.world#domain@com

所以问题是:

如何在dot之后dot替换#

这个问题对于像正则表达式或其他更好的解决方案是开放的。

(我将自行承担风险)

1 个答案:

答案 0 :(得分:1)

您可以使用像

这样的正则表达式
^(.*)@(.*)\.(.*)$

并替换为$1#$2@$3

请参阅regex demo

详细

  • ^ - 字符串开头
  • (.*) - 第1组捕获除换行符之外的任何0 +字符,直到最后...
  • @ - at at sign
  • (.*) - 第2组捕获除了换行符之外的任何0 +字符...
  • \. - 字面点
  • (.*) - 第3组捕获剩下的部分
  • $ - 字符串结束。