替换PHP中第一次出现的所有(。)

时间:2010-01-30 10:52:41

标签: php regex preg-replace

示例
输入= 1.1.0.1
预期产出= 1.101

7 个答案:

答案 0 :(得分:12)

您可以非常轻松地使用 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;

答案 1 :(得分:6)

$s = preg_replace('/((?<=\.)[^.]*)\./', '$1', $s);

答案 2 :(得分:2)

$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] ) );

答案 3 :(得分:1)

  1. 匹配并释放第一个出现的文字点
  2. 替换所有后续文字点

代码:(Demo)

echo preg_replace('~^[^.]*\.(*SKIP)(*FAIL)|\.~', '', $string);
// 1.101

或者使用“继续”字符 (\G),消耗并忘记第一个文字点,然后替换所有后续文字点。

代码:(Demo)

echo preg_replace('~(?:^[^.]*\.|\G(?!^))[^.]*\K\.~', '', $string);
// 1.101

或者简单地检查一个文字点是否有一个文字点出现在字符串的前面。

代码:(Demo)

echo preg_replace('~(?<=\.)[^.]*\K\.~', '', $string);
// 1.101

答案 4 :(得分:0)

我虽然substr_replace()可以在这里工作,但遗憾的是没有......这是一种正则表达式方法:

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

您还可以使用s开关

尝试以下正则表达式
<?php
$string = '1.1.0.1';
$pattern = "/(?s)((?<=\.).*?)(\.)/i";
$replacement = "$1";
echo preg_replace($pattern, $replacement, $string);
?>

输出:

1.101