如何更换每一秒的空白区域?

时间:2010-11-16 13:51:02

标签: php pcre

我希望使用,将每隔一个空格替换为“preg_replace”。并输入如下字符串:

$string = 'a b c d e f g h i';

应该产生如下输出:

a b,c d,e f,g h,i

感谢

3 个答案:

答案 0 :(得分:6)

您可以结合使用explodearray_chunkarray_mapimplode

$words = explode(' ', $string);
$chunks = array_chunk($words, 2);
$chunks = array_map(function($arr) { return implode(' ', $arr); }, $chunks);
$str = implode(',', $chunks);

但它假设每个单词由一个空格分隔。

另一种可能更简单的解决方案是使用preg_replace,如下所示:

preg_replace('/(\S+\s+\S+)\s/', '$1,', $string)

模式(\S+\s+\S+)\s匹配一个或多个非空白字符(\S+)的任何序列,后跟一个或多个空白字符(\s+),后跟一个或多个非空格字符-whitespace字符,后跟一个空白字符,并用逗号替换最后一个空格。领先的空白将被忽略。

所以匹配将在这种情况下:

a b c d e f g h i
\__/\__/\__/\__/

然后将其替换如下:

a b,c d,e f,g h,i

答案 1 :(得分:4)

由于你想搜索和替换字符,你可以这样做:

// function to replace every '$n'th occurrence of $find in $string with $replace.
function NthReplace($string,$find,$replace,$n) {
        $count = 0;
        for($i=0;$i<strlen($string);$i++) {
                if($string[$i] == $find) {
                        $count++;
                }
                if($count == $n) {
                        $string[$i] = $replace;
                        $count = 0;
                }
        }
        return $string;
}

Ideone Link

答案 2 :(得分:1)

    function insertAtN($string,$find,$replace,$n) {
        $borken =  explode($find, $string);
        $borken[($n-1)] = $borken[($n-1)].$replace;
        return (implode($find,$borken));
    }

    $string ="COMPREHENSIVE MOTORSPORT RACING INFORMATION"; 
    print insertAtN($string,' ',':',2) 
    //will print
    //COMPREHENSIVE MOTORSPORT:RACING INFORMATION