str replace auf ganze Wörter anwenden

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.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

str replace auf ganze Wörter anwenden

Beitrag von TLoD »

Hallo Gemeinde,

ich habe da mal wieder ein Problem bei dem ich auch durch Google nicht weiter komme.
Ich habe eine Funktion mit str replace erstell, welche mir bestimmte Wörter in einem Text ersetzen soll.
Das ganze funktioniert auch soweit ganz gut, nur habe ich das Problem, dass wenn ein Suchwort in einem anderen Wort enthalten ist, dann dieses
Wort auch verändert wird.

Bsp.: Arzt = Doktor -> Hautarztpraxis = HautDOKTORpraxis

Wie bekomme ich es nun in den Griff, dass nur er nur das Wort Hautarztpraxis erkennt aber das enthaltene Wort arzt in diesem Wort übersieht bzw. nicht erkennt?

Das habe ich bis dato schon gemacht. Evtl. kann das ja einer von Euch mal erweitern.

Code: Alles auswählen

        function formatierung($inhalte){
        $SearchValues = array(
            'INC',
            'inc',
            'ATT',
            'att',
            'Raid',
            'raid',
            'RAID',
            'OK',
            'ok',
            'clean',
            'Clean',
            'arkon'
);
        // Replace phrase pieces with female versions
            $ReplacementValues = array(
                '<b><span style=\'color:#b10505\'>INC</span></b>',
                '<b><span style=\'color:#b10505\'>INC</span></b>',
                '<b><span style=\'color:#b10505\'>ATT</span></b>',
                '<b><span style=\'color:#b10505\'>ATT</span></b>',
                '<b><span style=\'color:#b10505\'>RAID</span></b>',
                '<b><span style=\'color:#b10505\'>RAID</span></b>',
                '<b><span style=\'color:#b10505\'>RAID</span></b>',
                '<b><span style=\'color:green\'>OK</span></b>',
                '<b><span style=\'color:green\'>ok</span></b>',
                '<b><span style=\'color:green\'>clean</span></b>',
                '<b><span style=\'color:green\'>clean</span></b>');
        return str_replace($SearchValues, $ReplacementValues, $inhalte
);
    }
Schon mal Danke für Eure Hilfe!
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: str replace auf ganze Wörter anwenden

Beitrag von Pyramide »

Das geht z.B. mit Regulären Ausdrücken und \b. Dabei kannst du dann auch gleich mit dem i-Modifier Groß- und Kleinschreibung ignorieren:

Code: Alles auswählen

$text = preg_replace('#\bwort\b#i', 'ersetzung', 'ein Wort oder ein Wortspiel'); 
KB:knigge
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von TLoD »

Hab das ganze jezt mal auf preg_replace umgeschrieben, aber nun geht garnichts mehr...

Was mach ich denn da falsch?

Code: Alles auswählen

function formatierung($inhalte){
            $SearchValues[0] = '/INC/';
            $SearchValues[1] = '/inc/';
            $SearchValues[2] = '/ATT/';
            $SearchValues[3] = '/att/';
            $SearchValues[4] = '/Raid/';
            $SearchValues[5] = '/raid/';

	// Replace phrase pieces with female versions
                $ReplacementValues[0] = '<b><span style=\'color:#b10505\'>INC</span></b>';
                $ReplacementValues[1] = '<b><span style=\'color:#b10505\'>INC</span></b>';
                $ReplacementValues[2] = '<b><span style=\'color:#b10505\'>ATT</span></b>';
                $ReplacementValues[3] = '<b><span style=\'color:#b10505\'>ATT</span></b>';
                $ReplacementValues[4] = '<b><span style=\'color:#b10505\'>RAID</span></b>';
                $ReplacementValues[5] = '<b><span style=\'color:#b10505\'>RAID</span></b>';

                ksort($SearchValues);
                ksort($ReplacementValues);

        return preg_replace($SearchValues, $ReplacementValues, $inhalte);
    }
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
FCM
Mitglied
Beiträge: 1863
Registriert: 03.05.2006 14:47
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von FCM »

Na ja, vielleicht wendest du es auch so an, wie Pyramide es dir gesagt hat?

Code: Alles auswählen

return preg_replace("#\b" . $SearchValues . "\b#i", $ReplacementValues, $inhalte);
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: str replace auf ganze Wörter anwenden

Beitrag von Pyramide »

So wird das garantiert nicht funktionieren. Das \b muss natürlich in den einzelnen Array-Elementen enthalten sein.
KB:knigge
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von TLoD »

Hallo,

ich habe es mal so abgeändert wie Ihr es beschrieben habt (zu mindestens bin ich der Meinung es so gemacht zu haben) aber es will ein fach nicht funzen.
Stell ich mich nun wirklich so blöde an?! Ich bekomme jetzt immer folgende Fehlermeldung ausgegeben.

Code: Alles auswählen

Warning: preg_replace() [function.preg-replace]: Parameter mismatch, pattern is a string while replacement is an array in.....
Und hier mal meine Funktion in abgeänderter Form.

Code: Alles auswählen

        function formatierung($inhalte){

            $SearchValues[0] = "INC";
            $SearchValues[1] = "inc";
            $SearchValues[2] = "ATT";
            $SearchValues[3] = "att";
            $SearchValues[4] = "Raid";
            $SearchValues[5] = "raid";

        
                $ReplacementValues[0] = "<b><span style=\"color:#b10505\">INC</span></b>";
                $ReplacementValues[1] = "<b><span style=\"color:#b10505\">INC</span></b>";
                $ReplacementValues[2] = "<b><span style=\"color:#b10505\">ATT</span></b>";
                $ReplacementValues[3] = "<b><span style=\"color:#b10505\">ATT</span></b>";
                $ReplacementValues[4] = "<b><span style=\"color:#b10505\">RAID</span></b>";
                $ReplacementValues[5] = "<b><span style=\"color:#b10505\">RAID</span></b>";
                
                ksort($SearchValues);
                ksort($ReplacementValues);

        return preg_replace("#\b" . $SearchValues . "\b#i", $ReplacementValues, $inhalte);
    }
*EDIT* Beitrag von Pyramide erst eben gesehen - baue es gleich mal so um

*EDIT 2* Jetzt bekomm ich noch mehr Fehlermeldungen als vorher - finde im Netz auch keine brauchbaren Bsps. - Könnte einer von euch bitte eben meine Funktion umschreiben und wenns geht mit Kommentaren versehen damit ich auch gleich was lerne?! Wäre Euch da echt sehr dankbar!
Zuletzt geändert von TLoD am 09.04.2009 13:22, insgesamt 1-mal geändert.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von gn#36 »

Wie sieht es denn jetzt aus? Wieso hast du weniger Suchworte als Ersetzungen? Das führt unweigerlich zu einem Fehler.

Mini Beispiel (ungetestet):

Code: Alles auswählen

function bla($blub)
{
    $search[] = '#\bWort\b#i';
    $search[] = '#\bWort2\b#i';
    $replace[] = 'Karl';
    $replace[] = 'Heinz';
    return preg_replace($search, $replace, $blub);
} 
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.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von TLoD »

gn#36 hat geschrieben:Wie sieht es denn jetzt aus? Wieso hast du weniger Suchworte als Ersetzungen? Das führt unweigerlich zu einem Fehler.
Sry war mein Fehler - hatte um nicht zu viel Code zu posten das Script ein wenig gekürzt und oben vergessen auch auf 5 zu minimieren.
Habe es mal oben im Beitrag angepasst. Ich werde Deinen Vorschlag später mal testen. Scheinbar liegt mein Fehler darin, das ich die Einschränkungen im return... mache und nicht oben im Suchwort. Muss ich jetzt die Zahlen in den [] weglassen da automatisch immer der erste gefundene Eintrag genommen wird oder soll ich weiterhin von 0-xx durchnummerieren? Wenn ich dann die Zahlen in den [] im Suchwort weglasse aber die [] stehen lassen, dann muss ich doch unten im return... [$i] am Suchwort anhängen oder? Tut mir leid das ich so unqualifizierte Fragen stelle, aber ich kenn mich einfach noch zu wenig damit aus.

Besten Dank & Gruss
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von gn#36 »

Ob du durchnummerierst oder nicht ist ziemlich egal, wenn du es nicht tust passiert es automatisch.

Du kannst ein Array nicht in folgender Weise bearbeiten:

Code: Alles auswählen

$array = array('a', 'b', 'c');
$array = $array . 's';
//Erwartet würde evtl als Ergebnis array('as', 'bs', 'cs'), das ist aber NICHT der Fall!
 
Deswegen funktioniert das hier nicht:

Code: Alles auswählen

return preg_replace("#\b" . $SearchValues . "\b#i", $ReplacementValues, $inhalte);
Du musst $SearchValues in jedem Eintrag anpassen.
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.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Re: str replace auf ganze Wörter anwenden

Beitrag von TLoD »

So ich habe es mal geändert.
Ich habe es sowohl mit Zahlen in den [] als auch ohne probiert aber immer mit dem selben Ergebniss.
Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 3 in ... on line 85

Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 2 in ... on line 85

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing ) at offset 6 in ... on line 85

Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 2 in ... on line 85

Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 3 in ... on line 85

Warning: preg_replace() [function.preg-replace]: Unknown modifier '*' in ... on line 85

Warning: preg_replace() [function.preg-replace]: No ending delimiter '#' found in ... on line 85

Code: Alles auswählen

        function formatierung($inhalte){

        // Search phrase pieces

            $SearchValues[] = '#\bINC\b#i';
            $SearchValues[] = '#\binc\b#i';

        // Replace phrase pieces

                $ReplacementValues[] = '<b><span style=\'color:#b10505\'>INC</span></b>';
                $ReplacementValues[] = '<b><span style=\'color:#b10505\'>INC</span></b>';

        return preg_replace($SearchValues, $ReplacementValues, $inhalte);
    }
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Antworten

Zurück zu „Coding & Technik“