【问题标题】:Replace only if string after some string仅当字符串在某个字符串之后才替换
【发布时间】:2016-09-13 12:57:29
【问题描述】:

背景是我想编码电子邮件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

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

(我将自担风险使用)


【问题讨论】:

  • 这个模式的正则表达式很简单。你试过建造一个吗?

标签: php regex encoding replace


【解决方案1】:

你可以使用像这样的正则表达式

^(.*)@(.*)\.(.*)$

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

请参阅regex demo

详情

  • ^ - 字符串开头
  • (.*) - 第 1 组捕获除换行符之外的任何 0+ 字符,直到最后一个...
  • @ - at 符号
  • (.*) - 第 2 组捕获除换行符之外的任何 0+ 字符,直到最后一个 ...
  • \. - 文字点
  • (.*) - 第 3 组捕获线路的其余部分
  • $ - 字符串结束。

【讨论】:

  • preg_replace( '/^(.*)@(.*)\.(.*)$/' , '$1#$2@$3', 'hello.world@domain.com' );,非常感谢
猜你喜欢
  • 2018-06-30
  • 2021-06-02
  • 2021-09-29
  • 1970-01-01
  • 2021-03-11
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
相关资源
最近更新 更多