Как заменить каждый второй пробел?

Я хочу заменить каждое второе пробел на « , », используя preg_replace . И введите строку следующим образом:

 $string = 'abcdefgh i'; 

должен привести к следующему выводу:

 ab,cd,ef,gh,i 

благодаря

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

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

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

 abcdefghi \__/\__/\__/\__/ 

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

 ab,cd,ef,gh,i 

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

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

Идеальная ссылка

  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