Ich möchte jedes zweite Leerzeichen durch "" ersetzen. ,
" mit preg_replace
. Und Eingabezeichenfolge wie diese:
$string = 'a b c d e f g h i';
sollte zu einer Ausgabe wie dieser führen:
a b,c d,e f,g h,i
danke
Ich möchte jedes zweite Leerzeichen durch "" ersetzen. ,
" mit preg_replace
. Und Eingabezeichenfolge wie diese:
$string = 'a b c d e f g h i';
sollte zu einer Ausgabe wie dieser führen:
a b,c d,e f,g h,i
danke
Sie können eine Kombination verwenden aus explode
, array_chunk
, array_map
y implode
:
$words = explode(' ', $string);
$chunks = array_chunk($words, 2);
$chunks = array_map(function($arr) { return implode(' ', $arr); }, $chunks);
$str = implode(',', $chunks);
Dabei wird jedoch davon ausgegangen, dass jedes Wort durch ein einzelnes Leerzeichen getrennt ist.
Eine andere und wahrscheinlich einfachere Lösung ist die Verwendung von preg_replace
wie diese:
preg_replace('/(\S+\s+\S+)\s/', '$1,', $string)
Das Muster (\S+\s+\S+)\s
passt auf eine beliebige Folge von einem oder mehreren Zeichen ohne Leerzeichen ( \S+
), gefolgt von einem oder mehreren Whitespace-Zeichen ( \s+
), gefolgt von einem oder mehreren Nicht-Leerzeichen, gefolgt von einem Leerzeichen, und ersetzt das letzte Leerzeichen durch ein Komma. Führende Whitespace-Zeichen werden ignoriert.
In diesem Fall werden die Übereinstimmungen also sein:
a b c d e f g h i
\__/\__/\__/\__/
Diese werden dann wie folgt ersetzt:
a b,c d,e f,g h,i
Da Sie Zeichen suchen und ersetzen möchten, können Sie dies wie folgt tun:
// 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;
}
Dies schlägt fehl, wenn fun
wird für eine andere Zeichenfolge aufgerufen, wenn der vorherige Aufruf mit einer ungeraden Zählernummer zurückkam. Rufen Sie einfach preg_replace_callback('/( )/','fun',$string)
zweimal hintereinander auf die genannte Zeichenfolge und Sie erhalten unterschiedliche Ergebnisse.
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
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.