仅在某个字符串之后替换if字符串


Replace only if string after some string

背景是我想要编码邮件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#$2@$3

参见regex演示。

细节

:

  • ^ -字符串
  • 起始
  • (.*) -组1捕获除换行符以外的任何0+字符,直到最后一个…
  • @ - an at标志
  • (.*) -组2捕获除换行符以外的任何0+字符,直到最后一个…
  • '. -文字点
  • (.*) -组3捕获行
  • 的其余部分
  • $ -字符串结束