• Wenn du hier im Forum ein neues Thema erstellst, sind schon Punkte aufgeführt die du ausfüllen musst. Das dient im Allgemeinen dazu die notwendigen Informationen direkt mit der Frage bereitzustellen.
    Da in letzter Zeit immer wieder gerne das Formular gelöscht wurde und erst nach 3 Seiten Nachfragen die benötigten Infos für eine Hilfe kommen, werde ich nun jede Fragestellung die nicht einmal annähernd das Formular benutzt, sofort in den Sondermüll schicken.
    Füllt einfach die abgefragte Daten aus und alle können euch viel schneller helfen.

RegEx-Experte gesucht ...

RHS

Bekanntes Mitglied
Lizenzinhaber
Registriert
17. Aug. 2013
Beiträge
454
Punkte
108
Hallo,

ich muss unbedingt noch ein paar alte URLs aus vBulletin-Zeiten umschreiben, habe da aber ein kleines Problem:

Ich habe Links wie dieser:
Code:
http://www.domain.de/forum/album.php?albumid=816&attachmentid=15480
Daraus soll werden:
Code:
http://www.domain.de/forum/index.php?media/816

Dafür habe ich erst ein paar Tests mit mit dem Post Replace gemacht:
Regulärer Ausdruck: #album\.php\?albumid\=([0-9]+)\&attachmentid\=([0-9]+)#siU
Replacement String: index.php?media/albums/\1

Das funktioniert mit Post Replace auch prima, ich muss aber noch die AlbumID umschreiben und kann daher Post Replace nicht nutzen (die Album-ID wandel ich über ein PHP-Script selbst um, die AttachmentID kann entfallen).

Mit PHP habe ich jedoch, mit identischem RegEx-Ausdruck, das Problem, dass ein Teil der AttachmentID in die Ziel-URL "gemixt" wird:
Code:
http://www.domain.de/forum/index.php?media/8165480

Mein PHP-Code:
Code:
$input = array(
'regex' => "#album\.php\?albumid\=([0-9]+)\&attachmentid\=([0-9]+)#siU";
'replace' => "index.php?media/albums/\$1");

$new_msg = preg_replace($input['regex'], $input['replace'], $message);

Ich verstehe es ehrlich gesagt nicht, weil es mit Post Replace ja auch geht. Den Code davon habe ich mir auch angesehen, aber leider nicht kapiert, warum dort 2x preg_replace() verwendet wird ...

Hat vielleicht jemand eine Idee, was falsch laufen könnte?

Danke!
 
Lose Gedanken:
1. Warum klammerst du die Attachment-ID, wenn du die eh' nicht wieder brauchst?
2. Warum maskierst du Zeichen, die du gar nicht maskieren musst?
 
Ich habe URLs mit AttachmentID und ohne. Ich will nun erst die URLs mit AttachmentID ersetzen und dann die anderen.

Welche Zeichen muss ich nicht maskieren?
 
Rein technisch "musst" du nur deine Delimiter und jegliche Klammern maskieren, wenn sie Teil des Strings sind. Oh, und natürlich \.
 
Kann einem mal jemand (DAU tauglich) das ganze um diese RegEX Geschichte erklären. Mich düngt ich bekomm das nicht hin...

zB. hab ich Links wie: http://www.zetor-forum.de/forum/viewtopic.php?f=5&t=722#p4557
Die neu so aussehen sollten: http://www.zetor-forum.de/forum/threads/zetor-ur1-getriebebremse.722/#p4557

Warum das sowas nicht einfacher geht, so nach dem Motto suche folgende Zeichenkette, in welcher an folgenden Stellen Variablen auftauchen und ändere dann diese Zeichekette in die neue Zeichenkette in der die zuvor gefundenen Variablen an ddieser und jener Stelle eingefügt werden sollen. Hmmm es it wohl doch komplizierter... :(
 
Das geht schon deshalb nicht, weil der dynamische Thementitel nicht im originalen Link steht.
 
Und nu? Kann man also gar nichts machen, außer löschem der alten Links umd google keine Sackgassen (Fehler) zu präsentieren!?

Hmmm... :unsure:
 
Du kannst das durchaus ersetzen, der dynamische Thementitel wird für die Verlinkung nicht unbedingt benötigt. Der Ziel-Link http://www.zetor-forum.de/forum/threads/722/#p4557 würde also auch funktionieren.

Das lässt sich also mit RegEx umsetzen. Beispiele dazu gibt es im Post Replace Thread auf xf.com.

Hier hätte ich aber erst mal gern eine Hilfe für mein Problem ...
 
Mein Problem konnte ich lösen, in dem ich einfach das "U" am Ende des regulären Ausdrucks weggelassen haben ...

@otto:

Probiere mit Post Replace mal folgendes:

suchen nach: viewtopic.php
Regulärer Ausdruck: #viewtopic\.php\?f\=([0-9]+)\&t\=([0-9]+)#p([0-9]+)#siu
Replacement String: threads/\2/#\3
 
Tut doch nichts zur Sache ...
 
Zurück
Oben