blackout preg_replace

MiNiMaG

Erfahrenes Mitglied
Hallo.
Ich sitze nun schon seit knapp 20 Stunden vorm Rechner und muss einem Freund bei einem seiner vielen "Notfällen" helfen.

Nur leider habe ich gerade einen absoluten Blackout was das gute alte preg_replace betrifft:

Eine Ersetzung soll nur dann stattfinden WENN links UND/ODER rechts des Suchwortes (GROSS-/kleinschreibung ist egal) KEIN Buchstabe (auch GROSS/klein egal) vorhanden ist.

Für was man so nen bescheuertes preg braucht? Akronyme

Wäre nett, wenn mir hier jemand helfen könnte, da ich hier echt hänge und noch so einiges anderes zu tun ist.
 
Das Pattern sollte dann generell so aussehen:
Code:
%(?![a-z])(lookup)(?![a-z])%Uis

Nen Beispiel wäre aber eventuell noch ganz günstig, denn so richtig klar rausgekommen ist die Ausgangssituation für mich leider nicht :)
 
Ganz sicher war ich mir bei deinem Problem auch nicht, meinst du sowas?

PHP:
function replace($a, $b, $c) {
        return preg_replace('/(([^a-z])'.$a.')|('.$a.'([^a-z]))/i', '$3'.$b.'$5', $c);
}

$t = 'Bitte achte auf eine korrekte Grammatik';

echo replace('acht', 'x', $t)."\n";
echo replace('chte', 'x', $t)."\n";
echo replace('e', 'x', $t)."\n";
Ausgabe:

Bitte xe auf eine korrekte Grammatik
Bitte ax auf eine korrekte Grammatik
Bittx achtx auf xinx korrektx Grammatik
 
Ich danke euch beiden. Im Großen und Ganzen war es am Ende nur noch das /U, dass mich fertig gemacht hat.

Hier ein Example:
PHP:
<?PHP
$string = "Mein Auto hat 123 PS, und nicht 122ps.<br>Die Schnapsbrennerei hat 25 liter Pseudo Schnaps";
echo $string."<hr>";
$string =  preg_replace( "/(.*[^a-z]+)(PS)([^a-z]+.*)/Uis", '$1<acronym title="Pferdest&auml;rken">PS</acronym>$3', $string );
echo $string;
?>
 
Noch nen kleiner Verbesserungstipp zur Performanz: Diverse Ergebnisse will man ja nun nicht unbedingt mitfetchen, da sie unnötig sind (außerdem bremsen sie die Verarbeitung aus):
PHP:
<?php
$string = "Mein Auto hat 123 PS, und nicht 122ps.<br>Die Schnapsbrennerei hat 25 liter Pseudo Schnaps";
echo $string."<hr>";
$string =  preg_replace( "/(?![a-z])(PS)(?![a-z])/Uis", '<acronym title="Pferdest&auml;rken">$1</acronym>', $string );
// oder
$string =  preg_replace( "/(?:[^a-z])(PS)(?:[^a-z])/Uis", '<acronym title="Pferdest&auml;rken">$1</acronym>', $string );
// oder
$string =  preg_replace( "/(?=[^a-z])(PS)(?=[^a-z])/Uis", '<acronym title="Pferdest&auml;rken">$1</acronym>', $string );
echo $string;
Ein "?" zu Beginn einer Gruppierung kennzeichnet ein nicht zu fetchendes Objekt - Dazu kann man dann noch diverse Erklärungen geben, die aber höchstwahrscheinlich schon aus dem Beispiel ersichtlich werden ;)
 
Zurück