Замените все (.) Другое первое вхождение в PHP

пример
Вход = 1.1.0.1
Ожидаемый результат = 1.101

Вы можете довольно легко использовать substr () и str_replace () :

$str = '1.1.0.1'; $pos = strpos($str,'.'); if ($pos !== false) { $str = substr($str,0,$pos+1) . str_replace('.','',substr($str,$pos+1)); } echo $str; 
 $s = preg_replace('/((?<=\.)[^.]*)\./', '$1', $s); 
 $input="1.1.1.1"; $s = explode(".",$input ) ; $t=array_slice($s, 1); print implode(".",array($s[0] , implode("",$t)) ); 

или

 $input="1.1.1.1"; $s = explode(".",$input ,2) ; $s[1]=str_replace(".","",$s[1]); print implode(".",array($s[0] ,$s[1] ) ); 

Я, хотя substr_replace() будет работать здесь, но, к сожалению, нет … Вот подход с регулярным выражением:

 $str = preg_replace('~(\d+\.)(\d+)\.(\d+)\.(\d+)~', '$1$2$3$4', $str); 
 $count = 0; $output = $input; do { $output = preg_replace('/^(.+\.)(.+)\./', '$1$2', $output, -1, $count); } while ($count != 0); echo $output; 

Вы также можете попробовать следующее регулярное выражение с переключателем s ,

 <?php $string = '1.1.0.1'; $pattern = "/(?s)((?<=\.).*?)(\.)/i"; $replacement = "$1"; echo preg_replace($pattern, $replacement, $string); ?> 

Вывод:

 1.101