Seite 1 von 2

str replace auf ganze Wörter anwenden

Verfasst: 05.04.2009 16:06
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!

Re: str replace auf ganze Wörter anwenden

Verfasst: 05.04.2009 17:02
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'); 

Re: str replace auf ganze Wörter anwenden

Verfasst: 05.04.2009 18:08
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);
    }

Re: str replace auf ganze Wörter anwenden

Verfasst: 08.04.2009 10:07
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);

Re: str replace auf ganze Wörter anwenden

Verfasst: 08.04.2009 18:30
von Pyramide
So wird das garantiert nicht funktionieren. Das \b muss natürlich in den einzelnen Array-Elementen enthalten sein.

Re: str replace auf ganze Wörter anwenden

Verfasst: 08.04.2009 18:45
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!

Re: str replace auf ganze Wörter anwenden

Verfasst: 09.04.2009 05:19
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);
} 

Re: str replace auf ganze Wörter anwenden

Verfasst: 09.04.2009 13:25
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

Re: str replace auf ganze Wörter anwenden

Verfasst: 09.04.2009 17:29
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.

Re: str replace auf ganze Wörter anwenden

Verfasst: 09.04.2009 18:41
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);
    }