我试图替换字符串中非[A-Z]
且位于@
之前的字符。所以这个
AreplacehereZ@domain.tld
需要成为:
A***********Z@domain.tld
我尝试过:
$string = 'AreplacehereZ@domain.tld';
$pattern = '/(?<!@)[^A-Z@'.]/';
$replacement = '*';
$replace = preg_replace($pattern, $replacement, $tring);
但结果是
'A***********Z@d*****.***'
因此,我无法找到如何避免仅使用preg_replace()
来替换@domain.tld
的方法。
domain.tld
可以是任何东西,所以我不能在$pattern
变量中使用(?<!@domain.tld)
。
您可以从当前位置断言,匹配[^A-Z]
,然后确保您可以消耗任意数量的字符,但仍然可以达到@
:
$pattern = '/[^A-Z](?=[^@]*@)/';
产品:
A***********Z@domain.tld