Я хочу заменить каждое второе пробел на « ,
», используя 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