Заменить все (.), Кроме первого вхождения в PHP - PullRequest
9 голосов
/ 30 января 2010

Пример
Ввод = 1.1.0.1
Ожидаемый выход = 1.101

Ответы [ 6 ]

12 голосов
/ 30 января 2010

Вы можете использовать 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;
6 голосов
/ 30 января 2010
$s = preg_replace('/((?<=\.)[^.]*)\./', '$1', $s);
2 голосов
/ 30 января 2010
$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] ) );
0 голосов
/ 22 июня 2014

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

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

Выход:

1.101
0 голосов
/ 30 января 2010
$count = 0;
$output = $input;
do {
    $output = preg_replace('/^(.+\.)(.+)\./', '$1$2', $output, -1, $count);
} while ($count != 0);
echo $output;
0 голосов
/ 30 января 2010

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

$str = preg_replace('~(\d+\.)(\d+)\.(\d+)\.(\d+)~', '$1$2$3$4', $str);
...