3 Stimmen

Wie kann man jeden zweiten Leerraum ersetzen?

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

6voto

Gumbo Punkte 617646

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

4voto

codaddict Punkte 426877

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

Ideone Link

0 Stimmen

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.

1voto

Nafsin Vk Punkte 161
    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.com

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.

Powered by:

X