preg_replace Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
ankern
code
ende
erscheinen
ersetzen
ersetzung
ersten teil
folgendes code
gelten
hilfe
letzte vorkommen
problem
string
url
verwenden
zweiten teil
-
Aloha,
schon wieder dieses blöde Thema Naja...
Folgendes:
~^(?:<a.*?</a>|\[url.*?\[/url]|\[/?[^]]++]|</?[^>]++>)(*SKIP)(*FAIL)|".$this->exp[1]."$~is
Funktioniert so weit relativ gut. Bis auf ein Problem;
Ich möchte mit Hilfe dieses Regex "abk" durch "Abkürzung" ersetzen lassen. Aus irgendwelchen unerschwinglichen Gründen funktioniert das aber nicht:
Aus
abk
ABK
AbK
wird
abk
ABK
Abkürzung
Wie man sieht, funktioniert es weder im lower noch im uppercase, obwohl der Modifier i gesetzt ist.
preg_replace('~^(?:<a.*?</a>|\[url.*?\[/url]|\[/?[^]]++]|</?[^>]++>)(*SKIP)(*FAIL)|".$this->exp[1]."$~is', $ersetzung, $string);
Woran liegts?
EDIT:
Okay, das Problem ist ein Anderes... Er ersetzt immer nur das letzte Vorkommen im String
EDIT:
Entferne ich ^ und $ kommt logischerweise das raus:
Abkürzungürzungürzung
Abkürzungürzungürzung
Abkürzungürzungürzung
EDIT:
Okay, ich habs. Anstatt ^ und $ muss ich \b verwenden
Beitrag zuletzt geändert: 8.4.2011 14:03:17 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Weiterhin hast du die Anker fehlerhaft positioniert, sie sollten nur im zweiten Teil erscheinen (nach dem |):
preg_replace('~(?:<a.*?</a>|\[url.*?\[/url]|\[/?[^]]++]|</?[^>]++>)(*SKIP)(*FAIL)|\b'.$this->exp[1].'\b~is', $ersetzung, $string);
Das `^` am Anfang würde auch nur für den ersten Teil gelten (und ihn damit mehr oder weniger unwirksam machen), das `$` würde nur für den zweiten Teil gelten, also nur die jeweils letzte Occurance ersetzen und auch nur, wenn sie genau am Ende ist (was ja auch passiert ist).
Beitrag zuletzt geändert: 8.4.2011 16:54:59 von nikic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage