正则表达式:掩盖除首尾字符外的所有字符

5
我希望能够掩盖字符串中除第一个和最后一个字符以外的所有字符。我尝试了以下代码:
<?php
$count = 0;
$string='asdfbASDF1234';
echo preg_replace('/(?!^)\S/', '*', $string, -1 , $count);
?>

它掩盖除第一个字符以外的所有字符。这个正则表达式应该怎么写?
3个回答

7
为什么不使用str_repeat()函数呢?
$length = strlen($in); 
$out = $in[0] . str_repeat('*', $length - 2) . $in[$length-1]; 

如果字符串足够长,比我的快几百倍。 - lonesomeday
请确保 len 至少为 2 个字符。@denis - marlo

6
这是你需要的正则表达式:
$string='asdfbASDF1234';
echo $string."\n";
echo preg_replace('/(?!^.?).(?!.{0}$)/', '*', $string);

这个答案被标记为正确,因为它直接与问题相关。但是Denis提供的备选答案也是一个不错的选择。 - Sujit Agarwal
这样它将替换除第一个之外的所有内容,就像这样:/(?!^.?).(?!.?$)/ 保留最后一个 - user109764

-2

有人想要在给定的句子中掩盖除每个单词的第一个字母以外的所有字母吗?

   function maskele($in){
$kelimeler=explode(" ",$in);
$isim=null;
foreach ($kelimeler as $kelime){
$length = strlen($kelime);
$out = $kelime[0] . str_repeat('*', $length - 1) ; 
$isim.=$out. " ";
}
return $isim;

}

这不是问题所要求的内容,而是问题已经具有且不需要的内容。 - Ajean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接