ereg_replace: nicht alle gesuchten ersetzen

fanste

Erfahrenes Mitglied
Hallo,

Ich habe da eine Frage zum Befehl

ereg_replace.

Wenn man da nach etwas bestimmten sucht, werden ja alle diesen gesuchten Types mit dem angegeben ersetzt. Kann man das irgendwie einschränken, also dass nich alle ersetzt werden (hoffentlich habe ich es nicht zu kompliziert geschrieben :D)
Code:
  $text = ereg_replace(" ","|",$text);

In diesem Fall suche ich nach leer zeichen, und will diese durch ein " | " ersetzen. Da in dem zu durchsuchenden Text aber nicht alle Lehrzeichen ersetzt werden sollen, sollen dies eingeschränkt werden.

Geht dass
 
Was bedeutet es sollen nicht alle ersetzt werden. Welche sollen dann ersetzt werden und welche nicht?

MFG
redX
 
Hallo,

Danke erstmal für deine schnelle antwort..

Es sollen nur die ersten 4 gefundenen Leerzeichen ersetzt werden.
 
Nebenbei noch:

Wenn es beim suchen etwas nicht gefunden hat, Wie kann ich das dann trotzdem durch ein | oder so ersetzen?

also ich suche beispielsweiße nach "/irgendwas". Wenn es gefunden wurde, soll ein | an das gesuchte angefügt werden. Wenn aber dass "/irgendwas" nicht gefunden wird, soll einfach an diese stelle ein | gesetzt werden. geht dass auch
 
Ich kenne nicht gerade eine Zauberlösung die mit einem Befehl deinen Wünschen entspricht. Du musst hald selber nen Algorythmus (scheiss Wort ;)) schreiben.

Also du gehst jedes Zeichen einzeln durch und wenn du ein Leerzeichen findest ersetzt du es. Dann hast du noch ein Counter, der Zählt wie viele Leerzeichen schon ersetzt wurden.

mit substr() kannst du die Zeichen einzeln durchgehen. Als dritten Parameter eine 1 und er nimmt immer ein Zeichen.
http://www.selfphp.net/selfphp/funktionsreferenz/string_funktionen/substr.html

Verstanden?

Das andere habe ich nicht verstanden. Also du kannst schon nach /irgendwas suchen. Und was soll nun passieren wenn es gefunden wurde? Ein | soll das /irgendwas ersetzten? Oder soll an das /irgendwas ein | angefügt werden? Oder soll am Schluss des Strings ein | gesetzt werden?

MFG
redX
 
Zuletzt bearbeitet:
wenn des /irgendwas gefunden wurde soll an das /irgendwas ein | angehängt werden. (also /irgendetwas| ). wenn das /irgendetwas aber nicht gefunden wurde, soll an der stelle, wo es seinsollte trotzdem ein | stehen.

und zu deiner ausführung. Nein, verstanden hab ich es nicht wirklich. bin noch ziehmlich unerfahren mit php.könntest du mir vll ein kurzes beispiel geben(bzw. ein link zeigen, wo ich soetwas sehen kann?).
 
PHP:
<?php 
    function strip($myText,$value,$replaceValue,$number) { 
        $myText = trim($myText); 
        $anz = 0; 
        for ($counter = 1; strlen($myText) >= $counter && $anz != $number; $counter++){ // Gehe den String Zeichen für Zeichen durch, solange es noch Zeichen hat und noch nicht die maximale Anzahl der zu ersetzenden Zeichen gefunden wurde.
             if (substr($myText, $counter , 1) == $value) { // Wenn das Aktuelle Zeichen das gesuchte Zeichen ist.
                $toSpace = $counter--; 
                $fromSpace = $counter+2; 
                $myText = substr($myText,0,$toSpace).$replaceValue.substr($myText,$fromSpace); // Ersetze das gesuchte Zeichen durch das gewünschte.
                $anz++; 
             } 
        } 
        return $myText; 
    } 
     
     
    echo strip("some sort of very stupid string"," ","|",2)."<br>"; 
    echo strip("some sort of very stupid string"," ","<--->",4)."<br>";     
    echo strip("some sort "," ","|",4)."<br>"; 
?>

muhahahahaha
Das hat Spass gemacht zu Programmieren. Musste auch zuerst ganz schön grübeln wie sowas funktioniert.

Habe das ganze in eine Funktion gequetscht. Du kannst den String, was gesucht wird, durch was ersetzt werden soll und wie oft einfach per Funktion aufruf übergeben.

Jetzt zu deinem 2ten Problem. Einfach alle /irgendwas durch /irgendwas| ersetzen gibts chon eine Fuktion.
PHP:
str_replace("/irgendwas","/irgendwas|",$myText);

Nun wenn das /irgendwas nicht gefunden wurde sollte an desen Stelle ein | erscheinen. Wo ist dessen Stelle? Wenn das einfach zu beginn ist, dann geht das ganze so:

PHP:
	if (substr_count($myText, "/irgendwas") == 0) {
		$myText = "|".$myText;
	}

Alles klar?

MFG
redX
 
Zuletzt bearbeitet:
Leute... nicht immer gleich mit Kanonen auf Spatzen schiessen, lieber vorher ins Manual schauen.
preg_replace().... das hat einen optionalen 4.Parameter.
Dieser gibt an, wie oft etwas ersetzt werden soll.

Ergo
Code:
preg_replace('/ /','|',$string,4);
fertitsch :-)

@redX:Ich hoff, ich hab dir jetzt nicht den Abend verdorben :-(
 
löl, naja, so gehts natürlich auch einfach. Aber wenn man die Funktion nicht kennt muss man hald mal ne eigene schreiben ;)

MFG
redX
 
Zurück