替换字符串中出现的所有子字符串,并保留前2-PHP
我想用一个空字符串替换所有电子邮件地址,只留下前两个。 所以$newString应该是替换字符串中出现的所有子字符串,并保留前2-PHP,php,regex,preg-replace,Php,Regex,Preg Replace,我想用一个空字符串替换所有电子邮件地址,只留下前两个。 所以$newString应该是 我正在给john@gmail.com及hoe@gmail.com但是。但这是徒劳的 我该如何做…作为一般答案: 与PREG\u SPLIT\u DELIM\u CAPTURE一起使用 在结果数组中,从[4]之后开始删除索引不均匀的每个数组项 然后使用将余数连接起来 您可以尝试使用爆炸 $regex = '([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})'; $string =
我正在给john@gmail.com及hoe@gmail.com但是
。但这是徒劳的
我该如何做…作为一般答案:
- 与
PREG\u SPLIT\u DELIM\u CAPTURE一起使用
- 在结果数组中,从
之后开始删除索引不均匀的每个数组项[4]
- 然后使用将余数连接起来
$regex = '([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})';
$string = 'I am emailing to john@gmail.com and hoe@gmail.com but harris@live.com';
$newString = preg_replace($regex,'',$string);
$str=我正在给john@gmail.com及hoe@gmail.com但是harris@live.com;
$str_数组=分解(,$str);
$counter=0;
$str_out=;
foreach($str_数组作为$cast){
$findme=@;
$pos=strpos($cast,$findme);
如果($pos==false){
$str_out=$str_out.$cast;
}否则{
$counter++;
如果你最近没有问过几乎相同的问题吗?你的正则表达式是否能正确识别所有电子邮件地址?使用preg_replace_callback并跟踪替换的数量。这太复杂了,而且会删除任何包含@的不仅仅是电子邮件地址的“单词”。
$str = I am emailing to john@gmail.com and hoe@gmail.com but harris@live.com;
$str_array = explode( , $str);
$counter = 0;
$str_out = ;
foreach($str_array as $cast){
$findme = @;
$pos = strpos($cast, $findme);
if ($pos === false) {
$str_out = $str_out . $cast . ;
}else{
$counter++;
if($counter<=2){
$str_out = $str_out . $cast . ;
}
}
}
echo $str_out;