php - 如何用特殊字符替换不匹配的单词?

标签 php regex preg-replace

我想用 * 替换相同数量的不匹配字符。就像我的字符串一样

<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="621a1b180611060311060311221a1b11114c010d0f" rel="noreferrer noopener nofollow">[email protected]</a>

应该替换为

x*********s@x**s.com

现在只是为了解决问题,我正在使用以下正则表达式

^(\w).*?(.@.).*?(.\.\w+)

因此使用正则表达式和 preg_replace 就像 as

echo preg_replace('/^(\w).*?(.@).*?(\.\w+)/', "$1****$2****$3", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ff8786859b8c9b9e8c9b9e8cbf87868c8cd19c9092" rel="noreferrer noopener nofollow">[email protected]</a>");

结果为

x****s@x****s.com

但我想在这里实现的是

x*********s@x**s.com

Demo

最佳答案

我会使用(*SKIP)(*F)

preg_replace('~(?:^.|.@.|.\.\w+$)(*SKIP)(*F)|.~', '*', $str);

DEMO

  • 首先匹配所有您不需要的字符。即 (?:^.|.@.|.\.\w+$)
  • 现在,使用 (*SKIP)(*F) 跳过这些匹配
  • |
  • 现在 | 后面的点将匹配除跳过的字符之外的所有字符。

关于php - 如何用特殊字符替换不匹配的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904220/

相关文章:

正则表达式允许数字和一个点

c# - 正则表达式,强制文本垂直

regex - 一系列没有 Last [L] Flag 的重写规则

php - 删除标点符号、符号、变音符号、特殊字符的最佳方法是什么?

PHP正则表达式查找非空格字母

php - VIM php语法错误

php - 推荐一个不错的非第三方简易聊天室

php - 如何从 php 连接到 unix 套接字

phpunit在phpstorm中运行问题,无法创建phar

php - 从字符串末尾删除 <br>