我想用 *
替换相同数量的不匹配字符。就像我的字符串一样
<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
最佳答案
我会使用(*SKIP)(*F)
preg_replace('~(?:^.|.@.|.\.\w+$)(*SKIP)(*F)|.~', '*', $str);
- 首先匹配所有您不需要的字符。即
(?:^.|.@.|.\.\w+$)
- 现在,使用
(*SKIP)(*F) 跳过这些匹配
|
或- 现在
|
后面的点将匹配除跳过的字符之外的所有字符。
关于php - 如何用特殊字符替换不匹配的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904220/