Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式替换开头的重复字符_Php_Regex - Fatal编程技术网

Php 正则表达式替换开头的重复字符

Php 正则表达式替换开头的重复字符,php,regex,Php,Regex,我有下面的php正则表达式代码,它可以查找并替换所有重复字符 $parts = explode("@", 'aaabbbddddeeesd@yahoo.com'); $username = $parts[0]; $domain = $parts[1]; $out = preg_replace('/(.)\1+/', '$1', $username); $email = $out . '@' . $domain;

我有下面的php正则表达式代码,它可以查找并替换所有重复字符

        $parts = explode("@", 'aaabbbddddeeesd@yahoo.com');
        $username = $parts[0];
        $domain = $parts[1];
        $out = preg_replace('/(.)\1+/', '$1', $username);
        $email = $out . '@' . $domain;

        print_r($email);
这段代码正在替换所有重复字符,但我只需要替换字符串开头的第一个组

范例aaabbbddddeeesd@yahoo.com我需要输出为abbbddddeeesd@yahoo.com

我尝试过不同的正则表达式,但直到现在为止,只有这个是有效的


谢谢

您不用正则表达式,而是可以提取用户名的第一个字符(使用
$username[0]
)和
ltrim()
将其从字符串中删除,并将它的1个匹配项放回

$out = $username[0].ltrim($username, $username[0]);

非常奇怪的要求,但您需要将所需的替换字符锚定到字符串的开头:
/^()\1+/
请参阅文档,特别是
$limit
参数。您所说的
第一组
是指
@
之前的内容吗?所以
aaabbddddeesd
应该变成
abdesd
?或者
preg_替换('/(..\1+/','$1','s,1)
或者
preg_替换('/^(..\1+/','$1',$s)