我希望使用,
将每隔一个空格替换为“preg_replace
”。并输入如下字符串:
$string = 'a b c d e f g h i';
应该产生如下输出:
a b,c d,e f,g h,i
感谢
答案 0 :(得分:6)
您可以结合使用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+
),后跟一个或多个非空格字符-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;
}
答案 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