preg_replace only substring before defined char


preg_replace only substring before defined char

我试图替换字符串中非[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