Как заменить каждый второй пробел? - PullRequest
3 голосов
/ 16 ноября 2010

Я хочу заменить каждый второй пробел на ",", используя preg_replace.И входная строка, подобная этой:

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

, должна привести к выводу, подобному этому:

Ответы [ 3 ]

6 голосов
/ 16 ноября 2010

Вы можете использовать комбинацию explode, array_chunk, array_map и implode:

$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+), за которыми следует один или несколько непробельных символов,сопровождается одним пробельным символом и заменяет последний пробел запятой.Ведущие пробелы будут игнорироваться.

Таким образом, совпадения будут в этом случае:

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

Затем они заменяются следующим образом:

a b,c d,e f,g h,i
4 голосов
/ 16 ноября 2010

Поскольку вы хотите искать и заменять символы, вы можете сделать это следующим образом:

// 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

1 голос
/ 06 ноября 2016
    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
...