Preg_replace

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
TheHoschi
Mitglied
Beiträge: 4
Registriert: 01.04.2009 12:57

Preg_replace

Beitrag von TheHoschi »

Mohoin kann mir jemand sagen warum das folgende nicht funktioniert?:

Code: Alles auswählen

function PatchArea($area){
     /////////////////////////////////////
    //     --- Unterfunktion ---       ///
   ///////////////////////////////////// /
   // Vereint Doppelte Punkte         // /
   ///////////////////////////////////// /
   // Parameter:                      // /
   // $area: Der zuvor erstellte      // /
   // string mit den area-einträgen  ///
   /////////////////////////////////////
   preg_match_all("/coords=\"(.*)\,4/",$area,$result);
   preg_match_all("/title=\"(.*)\" alt/",$area,$name);
   #print_r($name[1]);
   #print_r ($result[1])."<br>";
   $a = (count($result[1])-1);
   for($i = 0; $i < $a; $i++){
      if($result[1][$i] == $result[1][$a]){
         print $name[1][$i];
         print $name[1][$a];
         preg_replace("/".$name[1][$i]."/",$name[1][$i].", ".$name[1][$a],$area);
         preg_replace("/".$name[1][$a]."/","",$area);
      }

   }

   return $area;
Der Sinn der Funktion ist es, aus dem String $area:

Code: Alles auswählen

	<area title="Malte" alt="Text" coords="371.350313091,473.431341396,4" shape="circle">
	<area title="Seppel" alt="Text" coords="416.094992396,395.196570387,4" shape="circle">
	<area title="Jan" alt="Text" coords="525.34174187,302.383891736,4" shape="circle">
	<area title="Nika" alt="Text" coords="365.829865644,269.340634416,4" shape="circle">
	<area title="Mario" alt="Text" coords="525.34174187,302.383891736,4" shape="circle">
doppelte Besetzungen der Koordinaten herauszusuchen und zusammenzufügen. In diesem Fall sollte statt "Jan", "Jan, Mario" stehen und die Mario-Zeile gelöscht werden.
klappt aber nicht^^

Zusatzinfos:
Das Auslesen der Namen und Koordinaten mit preg_match_all klappt wunderbar, der Haken scheint bei preg_replace zu liegen
Danke im Voraus
mfG Hoschi
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Preg_replace

Beitrag von gn#36 »

Also ich wäre mir nicht so sicher dass das so wirklich funktioniert, du vergleichst ja alles nur mit dem allerletzten Eintrag. Warum die Ersetzung nicht funktioniert liegt schlicht und einfach an der Reihenfolge in der du die beiden Ersetzungen vornimmst. Du fügst erst den Namen Mario ein, löscht dann im nächsten Schritt aber sämtliche Marios aus der Liste (inklusive dem den du gerade eingefügt hast). Dreh die Reihenfolge um und schon gehts. Um alles mit allem zu vergleichen brauchst du aber zwei Schleifen mit denen du durch die Daten läufst, also etwa so:

Code: Alles auswählen

for($i = 0; $i <= $a; $i++)
{
    for($j = 0; $j <= $a; $j++)
    {
        if($i != $j)
        {
            //Jetzt den Vergleich durchführen (Vergleich mit sich selbst ist sinnlos, daher das if)
        }
    }
} 
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
TheHoschi
Mitglied
Beiträge: 4
Registriert: 01.04.2009 12:57

Re: Preg_replace

Beitrag von TheHoschi »

Danke schonmal für die Antwort. Das scheint echt ein Fehler gewesen zu sein. Aber leider verändert sich am Quelltext genau NIX. Das preg-replace muss irgendwie falsch sein

Code: Alles auswählen

                print $name[1][$i];
                print $name[1][$a];
das ist ja nur ein Testdruck, der funktioniert auch und gibt einmal JanMario aus
warum geht das nich -.-
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Preg_replace

Beitrag von gn#36 »

Hast du denn auch das gemacht?
gn#36 hat geschrieben:... Dreh die Reihenfolge um und schon gehts....
Die preg_replace sind in der falschen Reihenfolge, außerdem: Du bekommst doch exakte Werte genannt, warum nimmst du nicht einfach str_replace? Das ist in dem Fall weniger Fehleranfällig, da die Inhalte der Variablen ja auch theoretisch Dinge wie Punkte, Klammern o.ä. enthalten könnten die das ganze dann zum Scheitern bringen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
TheHoschi
Mitglied
Beiträge: 4
Registriert: 01.04.2009 12:57

Re: Preg_replace

Beitrag von TheHoschi »

Hm habs jetzt mal so gemacht aber klappt auch nicht.

Code: Alles auswählen

   $a = (count($result[1])-1);
   for($i = 0; $i < $a; $i++){
      if($result[1][$i] == $result[1][$a]){
         str_replace("/".$name[1][$a]."/","",$area);
         str_replace("/".$name[1][$i]."/",$name[1][$i].", ".$name[1][$a],$area);
      }

   }
kann es sein, das die Zeilenumbrüche probleme machen?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Preg_replace

Beitrag von gn#36 »

[php:str_replace] ist nicht gleich [php:preg_replace].
Die Parameterreihenfolge ist anders und außerdem kannst du str_replace keine Regulären Ausdrücke geben, also lass die Slashes weg.

Außerdem ganz wichtig: Die Funktion verändert nicht den vorhandenen String, sondern gibt die veränderte Variante zurück! D.h. du musst danach mit dem Rückgabewert weiterarbeiten, der wird von dir aber völlig ignoriert, das ist so als würdest du die Funktion überhaupt nicht aufrufen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
TheHoschi
Mitglied
Beiträge: 4
Registriert: 01.04.2009 12:57

Re: Preg_replace

Beitrag von TheHoschi »

Danke dir, klappt xD wunderbare Sache =) super danke
Antworten

Zurück zu „Coding & Technik“