preg_replace() BBCode Zugriff auf Gruppen

shorty

Erfahrenes Mitglied
Hallo,

ich habe ein Problem, wie oben genannt mit der Funktion [PHPF]preg_replace[/PHPF].
Vorweg ist zu sagen, dass ich schon reichlich Kenntnisse in dieser Programmiersprache gesammelt habe und ich nun versuche, mich an das Thema "Suchen - Ersetzen" ranzusetzen.

Um dies mal ganz einfach aufzubauen, habe ich beispielsweise einen Text genommen, der einen BBCode enthält und ich diesen dann ersetzen möchte.

Dazu habe ich mir ein kleines Skript geschrieben und habe ebenfalls im Handbuch nachgelesen, dass man auf die Gruppen mit \\n zugreifen kann.

Nun hab ich aber folgendes Problem:
Wenn ich den Text "test" mit meinem Suchmuster durchsuche und ich zum Ersetzen "<\\1>\\2<\\3>" angebe, gibt PHP mir den Text zwar fett gedruckt aus, allerdings auch nur die Buchstaben zwischen erstem und letztem Buchstaben, sprich "es".

Hat jemand eine Idee, weshalb dieser Fall eintritt?

Hier nochmal der gesamte Code:

PHP:
$text = "test";
echo preg_replace("/^\[(.+)\]\w(.*)\w\[(\/.+)\]?$/U", "<\\1>\\2<\\3>", $text);

Wäre nett, wenn mir jemand helfen könnte. Vielleicht gibt es bei der Funktion auch Verbesserungsvorschläge...
 
Du Klammerst nicht alles zwischen den Tags, sondern lässt das erste und letzte Zeichen aus....dadurch werden diese übergangen.
erweitere die klammern:
Code:
echo preg_replace("@\[(.+)\](\w.*\w)\[(/.+)\]@Us", "<\\1>\\2<\\3>",$text);

Verbesserungsvorschläge?
Du solltest z.B. beim 2.Tag überprüfen, ob er mit dem 1. übereinstimmt.
 
@Sven Mintel:

Was bedeutet in der Funktion das "@" und das "U" ?

@Johannes Röttger:

Dadurch ist meiner Meinung der Lerneffekt größer, wenn man versucht, es selber zu lösen. Außerdem schreibe ich meine Skripte meistens selber ;).
 
Zuletzt bearbeitet:
Das mit dem Lerneffekt ist natürlich löblich, allerdings glaube ich kaum, dass es viele Personen gibt, die mit der Qualität von PEAR-Code konkurrieren könntent. Ich für meinen Teil halte es zumindest so, dass ich PEAR nutze wann immer es geht.

Edit: @ ist der Delimitier, U ist ungreedy.(PCRE - Modifiers)
 
Was bedeutet in der Funktion das "@" und das "U" ?
Das @-Zeichen dient im Perl-kompatiblen Regulären Ausdruck als Delimiter, also Begrenzer; das U steht für den „ungreedy“-Flag, das den regulären Audruck auf das erste passende Vorkommen des Musters zähmt.
 
Johannes Röttger hat gesagt.:
Das mit dem Lerneffekt ist natürlich löblich, allerdings glaube ich kaum, dass es viele Personen gibt, die mit der Qualität von PEAR-Code konkurrieren könntent. Ich für meinen Teil halte es zumindest so, dass ich PEAR nutze wann immer es geht.
Ich selbst hab auch noch nichts mit PEAR gemacht, bisher hab ich auch immer fein alles selbst geschrieben.
Was dabei rauskommt kann man ja zum Teil hier im Forum bestaunen. ;)
Ich finde es auch gut, dass Du es selbst versuchst, denn nur so lernt man.
$lernfaktor ist hier bei einigen im Forum ja sowieso sehr niedrig, daher ist es auf jeden Fall mal gut jemand zu finden der wirklich lernen will, auch wenn der Weg oft steinig ist. Wie es bei meinem Dekompressionsscript z.B. war.
Fertige Komponenten einsetzen kann ja fast jeder. (Auch hier gibt es immer ein paar Leute die es einfach nicht hinkriegen ;) )
Und es kann auch durchaus mal sein, dass man ploetzlich bei einem Provider ohne PEAR landet, denn das kann man ja beim Kompilieren von PHP auch deaktivieren. Ob das nachtraeglich moeglich ist weiss ich nicht, aber es besteht die Moeglichkeit, dass man auf eine PEAR-lose Umgebung trifft.
Und da ist es dann doch irgendwie besser wenn man weiss, dass man da schon was selbstgeschriebenes hat, was auch funktioniert wenn man mal ohne PEAR leben muss. Ansonsten kann man ja die PEAR-Komponenten nutzen. Wenn man es klever anstellt kann man die sogar beiliebig durch die eigenen ersetzen, man muss halt nur die Schnittstellen gleich halten.

Fazit: Ich schreib auch alles selbst und find das gut so. Und kann dies auch nur unterstuetzen.
Das heisst natuerlich nicht, dass ich PEAR fuer Ueberfluessig erklaeren will, aber es ist halt eine optionale, wenn auch recht oft aktive, Angelegenheit.
 
Man kann PEAR immer und überall installieren, sobald man Zugriff auf den Webspace hat. Aber mal ab davon, wieso sollte ich eine z.B. Logging-Klasse schreiben, wenn ich mich auch an PEAR::Log vergreifen kann - von Hundertschaften getestet und für gut befunden?
 
Aus Interesse.
Oder vielleicht weil die Klasse dann doch irgendwas nicht bietet was man gern haette.
Es gibt immer einen Grund es einfach mal selbst zu probieren.
 
Zurück