xenforo RegEx Anleitung - Finden und ersetzen von Bbcodes, Links, variablen Textblöcken...

Dieses Thema im Forum "XenForo Tipps & Tricks" wurde erstellt von otto, 1. Mai 2016.

  1. otto

    otto AD Lizenznehmer

    2.724
    1.112
    7. Juli 2015
    Fachinformatiker i.A.
    Leipzig
    Xenforo RegEx Anleitung - Finden und ersetzen von Bbcodes, Links, variablen Textblöcken...

    Wichtig! Stets zuerst ein Backup der Datenbank anlegen bevor man sich an Suche und Ersetze mit Hilfe von RegEx Tools wagt, denn bei fehlerhafter Anwendung kann man sich die Datenbank unbrauchbar machen!

    1. Handwerkszeug
    Add-on Find and Replace Add-on von Kier Darby installieren.
    - Lade dir das Add-on von XenForo.com herunter
    - entpacke es auf deinem Rechner
    - kopiere das gesamte Verzeichnis "PostReplace" mit seinem Inhalt in dein Forum unter /library/
    - installiere die XML des Add-ons, sie befindet sich jetzt im Verzeichnis /library/PostReplace/
    - rufe die Eingabemaske des Find and Replace Add-ons auf: admin.php?post-replace/
    upload_2016-5-1_15-36-29.png
    - so schaut das dann aus:
    upload_2016-5-1_15-50-33.png
    In die erste Eingabezeile kommt ein grober Suchbegriff rein, der lediglich hilft die Anzahl der später zu bearbeitenden Beiträge zu reduzieren.
    In die zweite Zeile kommt später der Suchbegriff als RegEx Ausdruck hinein, dazu später mehr.
    In die dritte Zeile kommt dann die Ersetzung hinein, auch dazu später mehr.

    The RegEx Coach (Win XP-10)
    - herunter laden
    - installieren und starten
    upload_2016-5-1_16-50-54.png
    Mit diesem Programm kann man gefahrlos seine ersten Schritte mit RegEx unternehmen, probieren und testen.
    Wer lieber auf Online Tools setzt, dem sei diese Seite ans Herz gelegt: RegExr: Learn, Build, & Test RegEx

    2. Wissen - RegEx Einstieg
    Im Netz gibt es außerdem zahlreiche englisch (z.B.: RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs oder Learn Code The Hard Way -- Books And Courses To Learn To Code ) aber auch deutschsprachige (z.B.: Reguläre Ausdrücke ) Tutorials zum Thema, in die man sich schon mal einlesen sollte. Ein Blick in das Diskussionsthema zum Add-on unter: Post Content Find / Replace lohnt sich aber auf jeden Fall ebenso!

    3. ein erstes Beispiel:
    Wir haben ein Forum von phpBB zu XenForo migriert und nun haben wir viele alte interne Links zu Seiten, die wegen der geänderten Linkstruktur im XenForo nun so nicht mehr erreichbar sind. Manchmal gibt es Anleitungen, wie man diese Links belassen kann und per .htaccess automatisch umschreibt - aber das soll hier nicht das Thema sein.
    Wir wollen also Links aus phpBB von dieser Art: (es wird ein Thema in einem Forum verlinkt)
    Code:
    http://www.domain.de/forum/viewtopic.php?f=31&t=777
    In das XenForo kompatible Schema übernehmen, so das obiger Link so ausschaut:
    Code:
    http://www.domain.de/forum/threads/777/
    Und da wir nicht nur einen solchen Link haben sondern viele, müssen wir einen Weg finden das Suche und Ersetze zu automatisieren. Hier kommt nun RegEx zum Einsatz, die Regulären Ausdrücke.

    Um nun unseren phpBB Themen Link und alle gleichartigen zu finden bedienen wir uns folgendem RegEx:
    Code:
    http:\/\/www.domain.de\/forum\/viewtopic.php\?f\=\d+\&t\=(\d+)
    Oh man werden viele denken - was ist das denn bitte? ;)
    Also zerpflücken wir gedanklich dieses Beispiel um es zu verstehen:
    • http: - ist antürlich der Anfang des Linkmusters "http://www.domain..."
    • \/\/ - wird dir in den RegEx Tutorials erklärt, "\/" steht dabei für "/" und setzt sich aus "\" und "/" zusammen - also KEIN "V" !!! sondern Backslash und Slash.
      Im Linkmuster sind zwei davon vorhanden "http://www.domain..."
    • www.domain.de - ist schnell erklärt: "http://www.domain.de/forum..."
    • \/ - kennst du jetzt schon, es steht für einen weiteren Slash Strich zwischen Domain und Verzeichnis: "...domain.de/forum/..."
    • forum - der Name eines Verzeichnisses: "...domain.de/forum/viewtopic.php..."
    • \/ - wieder ein Slash nach bekanntem Muster: "...domain.de/forum/viewtopic.php..."
    • viewtopic.php -
    • \? - ist der Platzhalter für das "?" : "...domain.de/forum/viewtopic.php?f=12&t=234"
    • f - steht für das f (in phpBB für "Forum") : "...domain.de/forum/viewtopic.php?f=12&t=234"
    • \= - steht für das "=" Zeichen: "...domain.de/forum/viewtopic.php?f=12&t=234"
    • \d+ - hier wird nun die erste variable in der Suche markiert, die erste Zahl: "...domain.de/forum/viewtopic.php?f=12&t=234" wobei "\d" für "eine Ziffer" (0-9) steht und das "+" daraus einen Ziffernblock beliebiger Länge macht. Die Zahl könnte also 1, 0 oder 12 oder 4567 sein und würde dennoch immer als ein Ziffernblock erfasst. Einstellige Zahlen könnte man so also auch mit lediglich "\d" erfassen.
    • \& - es wird das "&" Zeichen erfasst: "...domain.de/forum/viewtopic.php?f=12&t=234"
    • t - es wird das "t" erfasst (im phpBB steht dies für "Thread"): "...domain.de/forum/viewtopic.php?f=12&t=234"
    • \= - es wird das nächste "=" erfasst: "...domain.de/forum/viewtopic.php?f=12&t=234"
    • (\d+) - wie bereits zuvor wird wieder ein Ziffernblock beliebiger Länge erfasst, hier jedoch gerahmt von zwei Klammern. Die Klammern grenzen hier ein, was wir im aus den alten Links in die neuen Links übernehmen möchten, im Beispiel also die ID des Themas, da wir diese für die neuen Links benötigen und nur diese: "...domain.de/forum/viewtopic.php?f=12&t=234"
    Damit haben wir den eigentlichen Such String fertig.

    Das Add-on verlangt nun das wir unseren Such String in Delimeter fassen, sonst bekommen wir eine Fehlermeldung. An dieser Stelle will ich das nicht weiter ausdehnen und sage nur soviel, ihr sollt vor eurem Suchstring z.B. ein "#" setzen und am Ende eures Such String ein "#siu" - das schaut dann alles zusammen so aus:
    Code:
    #http:\/\/www.domain.de\/forum\/viewtopic.php\?f\=\d+\&t\=(\d+)#siu
    und wird in das Eingabefeld nummer 2 "Regulärer Ausdruck" eingegeben.

    In das Eingabefeld 1 kommt ein "grober" Suchbegriff, mit dem wir die zu Suche nach den tatsächlich zu bearbeitenden Links eingrenzen. In unserem Beispiel könnte man nun:
    Code:
    www.domain.de/forum/viewtopic
    eintragen.

    In das 3. Eingabefeld tragen wir ein, wie die zu ersetzenden Links künftig aufgebaut sein sollen:
    Code:
    http://www.domain.de/forum/threads/\1/
    Wichtig ist hier im Beispiel nun das "\1", welches der Marker ist, an dem unsere zuvor gefundene Themen ID eingetragen wird und zwar jeweils die, welche im veralteten Link zuvor extrahiert wurde.

    Hätten wir den ersten Ziffernblock nicht mit "\d+" sonder ebenfalls schon mit Klammern (\d+) markiert, hätten wir jetzt "\2" als Marker einfügen müssen, da wir für einen korrekten neuen Link den 2. Marker mit der Themen ID brauchten und nicht den ersten Marker der jetzt nur die Foren ID enthielte. ;)

    Der Rest ist eine ganz normale URL, in diese der Marker an passender Stelle eingesetzt wurde.

    Korrekt eingetragen in die Eingabemaske des Add-ons schaut unser Beispiel nun wie folgt aus:
    upload_2016-5-1_16-43-52.png
    Für einen Probelauf lassen wir das Häkchen bei "Änderungen speichern" raus und klicken auf "Fortfahren". Wenn alles passt wird uns eine Liste mit gefundenen Links auf der linken Seite und deren mögliche künftige Ersetzung auf der rechten Seite angezeigt:
    upload_2016-5-1_16-45-26.png

    Wenn alles gut ausschaut und wir zuvor ein Backup erstellt hatten, kann man es jetzt wagen den Haken bei "Änderungen speichern" am unteren Ende der Liste zu setzen und abermals auf "Fortfahren" zu klicken um unsere alten ungültigen Links in neue funktionierende zu wandeln.

    Soweit ein erstes Beispiel, wie man so eine Aufgabenstellung elegant lösen kann. Für Anregungen und konstruktive Kritik zu dieser Anleitung bin ich stets offen, ich hoffe dem ein oder anderem hilft dieses Mini-Tutorial. :like
     
    thomas und McAtze gefällt das.
OK Mehr Informationen

Diese Seite verwendet Cookies. Mit Deinem Klick auf OK, stimmst Du dem setzen von Cookies zu. Andernfalls werden keine gesetzt, was die Funktionalität einschränkt.