WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Regexp bbCode ersetzen (http://www.wcm.at/forum/showthread.php?t=210913)

Potassium 26.02.2007 22:05

Regexp bbCode ersetzen
 
Folgender Code soll aus einem Text ($text) gewisse Begriffe automatisch in andere umwandeln. in $replace_arr steht die Info dafür drin.
Nun ist das Problem, dass zb URIs die in der Form
[ url= http://potassium.1338.at ] Potablog [/ url ] oder [ url ] http://potassium.1338.at [/ url ] (Abstände wegdenken) NICHT mehr umgewandelt werden soll auch wenn sich innerhalb der Klammern etwas befindet, dass sonst umgewandelt gehört.
Beispiel
Google ersetze mit [ url ]www.google.at[/ url ]
[ url ]http://potassium.1338.at/google.php[/ url ] soll nicht ersetzt werden.
Hier nun der Code mit dem Regexp
PHP-Code:

foreach($replace_arr as $key => $value){
        
$modifier = (!empty($value["CASE_INSENSITIVE"]) ? "i" "");
        
$text preg_replace("/(.*?)[^\]]".$value["SRC"]."[^\[](.*?)/".$modifier,"$1$2".$value["REPLACE"]."$3$4",$text);
    } 

Kann mir da jemand weiterhelfen?

Potassium 06.03.2007 21:50

*push*
Interessiert das niemanden oder hat da echt niemand ne Ahnung?

iG0r 07.03.2007 00:35

Die Lösung scheint mir ganz einfach, sofern ich dein Problem richtig verstenden habe.

Du musst ja dem Script sagen, welche URL nicht in einen Link umgewandelt werden soll. Die URL-Liste, mit den Links die nicht in einen HTML Link umgewandelt werden sollen, kannst du mit einen array search und if - else in das foreach einbauen.

T.dot 07.03.2007 11:39

Hab ich dich richtig verstanden:
- Du hast ne regex um aus [url ]blabla[/url ] bzw. [url =blabla ] beschreibung[/url ] einen beschreibung zu machen
- Du hast ne Regex um aus [url ]www.blabla.at[/url] nen beschreibung zu machen?
- Du willst nicht, dass aus [url ]www.blabla.at[/url ] [url ]blabla[/url ] wird


Falls dem so ist ;) dann würd ich die www.blabla.at links nicht in <a href= sondern in [url ]http://www.blabla.at[/url ] umwandeln.

Wenn du allerdings einzelne Links ausschließen willst, musst du eben in der Regex diese angeben (nur wenn nicht link a oder link b oder link c, dann wandel um)

mfg Thomas

edit: kann man hier ned für einen Beitrag den vbCode abdrehen? auch zach... und das urls nicht automatisch umwandeln funktioniert auch nur bedingt...

pong 07.03.2007 16:07

Zitat:

Original geschrieben von Potassium
*push*
Interessiert das niemanden oder hat da echt niemand ne Ahnung?

Wozu das Rad neu erfinden? http://pear.php.net/package/HTML_BBCodeParser

pong

void 07.03.2007 16:39

ich verstehe leider das problem nicht ganz...

Potassium 11.03.2007 22:11

Es gibt eine Funktion, die automatisch zb "rofl" mit dem bbCode für einen Rofl-Smilie ersetzen soll. Wenn nun aber der Name des ROFL-Smilies selbst rofl enthällt, wird dieser wieder ersetzt. Verstanden soweit?
Nun soll eben rofl nur ersetzt werden, wenn es noch nicht in einem bbCode steht. Das PEAR-Package will ich ned benutzen, weils sehr überladen ist und ich es verstehn und selbst machen will. Müsste es sonst auch ans ganze Projekt anpassen. Daher lieber das Rad neu erfinden.

void 12.03.2007 09:47

okay, jetzt kapier ich es - du willst einfach einen teilstring max. 1x ersetzen und das war es dann für diesen teil...

*grübel* wenn mir etwas einfällt, werde ich es schreiben :-)

void 12.03.2007 12:05

zum verständnis ein beispiel: (ich verwende jetzt einfach runde klammern)
(url)www.lol.com(/url) wird normalerweise in www.:lol:.com umgewandelt, dein erwünschtes ergebnis soll aber so aussehen: www.lol.com, oder?

das ist glaube ich sehr kompliziert... und in der jetzigen struktur nicht möglich, denn: du gehst alle möglichen ersetzungen der reihe nach durch wie sie in dem array stehen, soll heißen: wenn du nun die ersetzungen vornimmst und dir den bereits "abgearbeiteten" text merkst, erhältst du eine gewichtung; z.B. wenn zuerst [url] abgearbeitet wird und erst danach lol, erhältst du das gewünschte ergebnis...

wenn du aber generell in einem bereits ersetzten teil auf keinen fall weiter ersetzen willst, darfst du nicht alle ersetzungen (z.b. [url]) auf einmal machen, sondern du musst zuerst das erste klammernpaar finden und ersetzen, danach das zweite, usw. dabei musst du dir natürlich auch merken, was du bereits ersetzt hast...


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag