Seite 2 von 2

Verfasst: 09.12.2004 20:47
von Root007
So, ich versuch nun schon alles mögliche... Auch wenn ich nicht alles nachvollziehen kann :roll:

Und leider hab ich immer noch Probleme:

Code: Alles auswählen

$post_text = preg_replace('!\[((size)=[0-9]:[a-z0-9]+)\](.*)\[/\1\]!i','<b>\3</b>',$post_text);
gibt mir z.b. sowas aus:
[size=24:c94942fa8b]TEXT-TEXT[/size:c94942fa8b]
Wobei der TEXT-TEXT ja tatsächlich fett dargestellt wird (Größe verändern will ich grad nicht), nur sind die bbcode-Tags noch da - warum werden die noch angezeigt?

Das nächste: Mit

Code: Alles auswählen

	$post_text = preg_replace('!\[((list):[a-z0-9]+)\]!i','',$post_text);
	$post_text = preg_replace('!\[/((list):[a-z0-9]+)\]!i','',$post_text);
lösch ich die Start- und End-Tags von list - was so auch funktioniert. Die jeweiligen Listenpunkte würd ich nun gern durch ein Pfeil ersetzen. Wie folgt geht es leider nicht:

Code: Alles auswählen

$post_text = preg_replace('!\[/((*):[a-z0-9]+)\]!i','&rarr;',$post_text);

oder

$post_text = str_replace('!\[*:$uid]!i', '&rarr;', $post_text);

Mit dem Zitieren hab ich demnach ebenfalls ein Problem:

Code: Alles auswählen

$post_text = preg_replace('!\[((quote):[a-z0-9]="(.*)"+)\]!i','<b>\2 hat geschrieben:</b><br />',$post_text);
	$post_text = preg_replace('!\[/((quote):[a-z0-9]+)\]!i','',$post_text);
Hier passiert gar nichts.

URLs zu ersetzen ist da kein Problem, da die $uid's da nicht dabei sind.

Ich hab wiegesagt schon viel rumprobiert, aber verstanden hab ich diese "Zeichen" für str_ und preg_replace meistens nicht. Und das php-Manual ist für mich irgendwie auch net ausführlich genug.

Wer sich diesen Stand ansehen will, die test.php gibts noch (der graue Text ist vor der bbcode Bearbeitung, der schwarze danach).

Ich freu mich echt über jeden Tipp!

Gruß

Verfasst: 21.12.2004 18:24
von MrMind
Root007 hat geschrieben:

Code: Alles auswählen

$post_text = preg_replace('!\[((size)=[0-9]:[a-z0-9]+)\](.*)\[/\1\]!i','<b>\3</b>',$post_text);
Haste mal mit \\3 versucht???

Mfg
MrMind

Verfasst: 21.12.2004 18:43
von Root007
Hi,

mit ner Antwort hätt ich hier nicht mehr gerechnet...

Ja, mit \\3 hatte ich es auch schon versucht - hat aber ebenfalls nicht geklappt.

Aber ich ersetz jetzt Anfang und Ende getrennt (und unabhängig) - und so gehts hervorragend.

Sind zwar jedesmal dann zwei Anweisungen aber macht ja nix - auf die Laufzeit kommts mir (jedenfalls bis jetzt) nicht so an.

Trotzdem danke! :)

Greetz

Verfasst: 21.12.2004 19:46
von Blutgerinsel
Root damit wirds besser ersichtlich:

http://pcre.nophia.de/evaluate/index.ph ... 72671966b0

Verfasst: 21.12.2004 19:54
von Root007
@Blutgerinsel: Boaaaaah - SUPER!!! Genau sowas hab ich schon immer gesucht! :)

Tausend Dank!! :grin:

Verfasst: 21.12.2004 21:43
von Root007
Eine letzte Interessensfrage hätte ich noch: Die Ersetzung klappt jetzt auch mit je einer Codezeile. Ich "spar" dadurch sechs Zeilen ein.

Was ist jetzt "besser" bzw. was geht schneller und für den Server schonender?

Die Zeit zum Generieren mess ich grad, allerdings schwankt die eh ziemlich, so dass ich daran nicht wirklich einen Unterschied merke. Heißt das jetzt, dass es für den Server "egal" ist, ob ich jetzt (lächerliche) 6 Zeilen mehr oder weniger hab?

Thx

Verfasst: 21.12.2004 23:48
von Blutgerinsel
Root007 hat geschrieben:Eine letzte Interessensfrage hätte ich noch: Die Ersetzung klappt jetzt auch mit je einer Codezeile. Ich "spar" dadurch sechs Zeilen ein.

Was ist jetzt "besser" bzw. was geht schneller und für den Server schonender?

Die Zeit zum Generieren mess ich grad, allerdings schwankt die eh ziemlich, so dass ich daran nicht wirklich einen Unterschied merke. Heißt das jetzt, dass es für den Server "egal" ist, ob ich jetzt (lächerliche) 6 Zeilen mehr oder weniger hab?

Thx
Nunja von den Templates her was ich u.A. auch eines zurzeit mache kann ich sagen das. str_replace bei einfachen Ersetzungen am schnellsten agiert. Bei komplexen Codeblöcken oder Schleifen etc. gewinnt preg_replace an Speed. Wobei man auch die veralteten ereg_replace manchmal etwas schneller sind aber eigentlich nicht mehr verwendet werden sollen.

Daher nutze ich eine Kombination aus preg_match_all und str_replace und das geht sehr schnell.....

Zur Zeitmessung du ermittelst schon via microtime(); welches du anhand des Leerzeichens zwischen Datetime und Timestamp zusammenaddierst die microtime(); ?
Normal schwankt das nicht so stark wie es sich jetzt nach deinen Worten anhört.....Durchschnittswert ermitteln wäre ein besserer Vergleichswert

Verfasst: 22.12.2004 13:58
von Root007
Um die Laufzeit zu ermitteln hab ich den Vorschlag vom PHP Manual: microtime genommen.
Blutgerinsel hat geschrieben:Normal schwankt das nicht so stark wie es sich jetzt nach deinen Worten anhört....
Hm, ok - ich hab da wahrscheinlich "etwas" übertrieben :roll: , im Normalfall liegt die Zeit bei 0,08 sec, manchmal gehts auch bis 0,4 sec hoch.

Ist diese Zeit akzeptabel?