Я хочу заменить каждое второе белое пространство «,
», используя preg_replace
. И входная строка так:Как заменить каждый второй пробел?
$string = 'a b c d e f g h i';
должен привести к выходу, как это:
a b,c d,e f,g h,i
благодаря
Я хочу заменить каждое второе белое пространство «,
», используя preg_replace
. И входная строка так:Как заменить каждый второй пробел?
$string = 'a b c d e f g h i';
должен привести к выходу, как это:
a b,c d,e f,g h,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;
}
Вы можете использовать комбинацию из 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
+1 для preg_replace - отлично работает. –
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
спасибо, а как насчет группы по 3 или 5 или ... – kelester
@kelester: Я обновил свой пост. – codaddict
Это не удается, когда 'fun' вызывается для другой строки, если предыдущий вызов возвращен с нечетным номером счетчика. Просто вызовите 'preg_replace_callback ('/() /', 'fun', $ string)' два раза подряд в указанной строке, и вы получите разные результаты. – Gumbo