preg_replace仅定义char之前的子字符串

时间:2013-11-25 16:25:07

标签: php regex preg-replace

我正在尝试将[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*****.***'

因此,我无法通过仅使用@domain.tld找到如何避免替换preg_replace()的方法。

domain.tld可以是任何内容,因此我无法在(?<!@domain.tld) var中使用$pattern

1 个答案:

答案 0 :(得分:2)

您可以从当前位置断言,匹配[^A-Z],然后确保您可以使用任意数量的字符,但仍会点击@

$pattern = '/[^A-Z](?=[^@]*@)/';

Produces

A***********Z@domain.tld