Regex - brauche Nachhilfe

Neuigkeiten und dergl

Regex - brauche Nachhilfe

Beitragvon motorang » Mo 10 Jul, 2017 09:00

Hi
wegen der Photobucketpanne muss ich Links ersetzen, im Forum und auf der Homepage.
Die Bilder hab ich unter demselben Namen auf meinem webspace abgelegt, aber natürlich ändert sich der URL.

Problem: ich kann nicht 1:1 ersetzen, weil die Photobucketlinks sind manchmal geschachtelt, in der Form

Code: Alles auswählen
[url=photobucketlink123.jpg.html][img]photobucketlink123.jpg[/img][/url]


So einen Link will ich ersetzen durch
Code: Alles auswählen
[img]motoranglink123.jpg[/img]


Problem: wenn ich nur die Bildadresse ersetze (search photobucketlink123.jpg > replace motoranglink123.jpg) dann bleibt die Schachtelung erhalten und ich hab einen toten Link auf der Seite.

Was also weg muss:
Code: Alles auswählen
[url=photobucketlink123.jpg.html]
am Anfang und
Code: Alles auswählen
[/url]
am Ende.

Den Endtext kann ich gut mit search>replace wegkriegen, weil sich da der Text nicht ändert.

Der Anfangstext ist eine harte Nuss für mich. Aber peanuts für einen Profi. Gibt es hier welche?

Ich suche eine regular expression, um in Notepad++ alle Vorkommen mit der Syntax [url=photobucketlink***.jpg.html]zu finden, und durch "nichts" zu ersetzen. Oder in einem anderen unter Windows lauffähigen Freeware-Programm.

seealpenproblem.jpg


Echten Beispieltext hab ich mal als Textdatei hier abgelegt:
http://motorang.com/photobucket/motoran ... ncode1.txt

Ist der erste Beitrag von da:
viewtopic.php?f=9&t=11266&p=207405&hilit=seealpen#p207405

Beispiel:

Die alte Bildadresse ist
Code: Alles auswählen
[url=http://s10.photobucket.com/user/motorang/media/motorang/2014-seealpen/DSC_5964_zps31db5feb.jpg.html][img]http://i10.photobucket.com/albums/a143/motorang/motorang/2014-seealpen/DSC_5964_zps31db5feb.jpg[/img][/url]


Die neue Bildadresse ist
Code: Alles auswählen
[img]http://motorang.com/photobucket/motorang/2014-seealpen/DSC_5964_zps31db5feb.jpg[/img]


Danke

Gryße!
Andreas, der motorang
-------------------
Gerade als die Raupe dachte, die Welt würde untergehen, verwandelte sie sich in einen Schmetterling.
Benutzeravatar
motorang
Site Admin
 
Beiträge: 22930
Registriert: Do 09 Jun, 2005 08:49
Wohnort: Graz

Re: Regex - brauche Nachhilfe

Beitragvon peter67 » Mo 10 Jul, 2017 10:29

darf man davon ausgehen, dass pro zeile immer nur ein Bilderlink drin ist?

Also sowas

Code: Alles auswählen
[url=photobucketlink123.jpg.html][img]photobucketlink123.jpg[/img][/url]


aber nicht

Code: Alles auswählen
[url=photobucketlink123.jpg.html][img]photobucketlink123.jpg[/img][/url] text dazwischen und dann [url=photobucketlink124.jpg.html][img]photobucketlink124.jpg[/img][/url]


Enden die url teile am Anfang immer mit html?

Ich kenne jetzt das notepad++ nicht, aber im vi (bzw. vim) funktioniert das hier:

Code: Alles auswählen
\[url=.*html\]


der backslash vor den eckigen Klammern, damit sie als Text betrachtet werden. Die dienen ja sonst zum Auflisten von Wertebereichen in der regexp.
z.B.
Code: Alles auswählen
[a-z]*


Achtung: wenn mehr als ein link in einer Zeile enthalten ist, matched das obige pattern from ersten
Code: Alles auswählen
[url=
bis zum
Code: Alles auswählen
.html]
vom letzen link in dieser Zeile. (Stichwort greedy matching)

Gryße
Peter
I love deadlines. I like the whooshing sound they make as they fly by. (Douglas Adams)
Benutzeravatar
peter67
Wenigschreiber
 
Beiträge: 778
Registriert: Mi 22 Mai, 2013 13:34
Wohnort: Salzburg

Re: Regex - brauche Nachhilfe

Beitragvon Wauschi » Mo 10 Jul, 2017 10:39

Ob deine Reg Ex funktioniert kann man hier einfach testen: https://regex101.com/
____________________
Signatur
Benutzeravatar
Wauschi
Vielschreiber
 
Beiträge: 1090
Registriert: Do 02 Mai, 2013 14:12
Wohnort: Tobelbad

Re: Regex - brauche Nachhilfe

Beitragvon Thomas Heyl » Mo 10 Jul, 2017 12:09

Hallo, signor presidente!

Hat das noch Zeit bis heute Abend? Ich bin ganz gut mit regulären Ausdrücken und Perl-Fan :grin: . Leider unterstützt NP++ nicht den vollen Umfang, aber da gibt's oft die Möglichkeit, in zwei Schritten zu arbeiten. Peters "gierig"-Problem lässt sich mit Fragezeichen nach Teilausdruck lösen, das macht's "non-greedy" :grin: .

my $szSrc = "<html><head><title>Testausgabe</title></head><body><h1>&Uuml;berschrift</h1></body></html>";
$szSrc =~ /(^<.+?>)/;
my $szNonGreedy = $1;

Da findet RegEx dann die erste, schließende, spitze Klammer und nicht die letzte und spuckt nur "<html>" aus.

Cheers, Langer
Benutzeravatar
Thomas Heyl
verstorben
 
Beiträge: 961
Registriert: Di 20 Dez, 2016 16:31
Wohnort: Frankfurt am Main

Re: Regex - brauche Nachhilfe

Beitragvon motorang » Mo 10 Jul, 2017 12:16

peter67 hat geschrieben:Ich kenne jetzt das notepad++ nicht, aber im vi (bzw. vim) funktioniert das hier:

Code: Alles auswählen
\[url=.*html\]




Hi
das funktioniert schon mal super, wenn nur ein Link pro Zeile drin ist - danke!

Das mit dem Fragezeichen behalt ich im Hinterkopf, aber so kann ich sicher 90% einfach abklicken.

Cool!

Gryße!
Andreas, der motorang
-------------------
Gerade als die Raupe dachte, die Welt würde untergehen, verwandelte sie sich in einen Schmetterling.
Benutzeravatar
motorang
Site Admin
 
Beiträge: 22930
Registriert: Do 09 Jun, 2005 08:49
Wohnort: Graz

Re: Regex - brauche Nachhilfe

Beitragvon Thomas Heyl » Mo 10 Jul, 2017 12:35

Noch'n Tipp, Herr Präsident!

Wenn Du die Version mit dem Fragezeichen so aufbaust, dass sie den ersten Link richtig umwandelt (und nur den!), kannst Du das mit "g" hinter dem schließenden RegExp auch auf mehrere solche Links in einer Zeile anwenden (/irgendwas/g). Und mit /m auch auf mehrere Zeilen oder eben mit /gm auf beliebige Menge in beliebig vielen Zeilen :grin: . Ich weiß jedoch nicht, ob das NP++ unterstützt.

Cheers, Langer
Benutzeravatar
Thomas Heyl
verstorben
 
Beiträge: 961
Registriert: Di 20 Dez, 2016 16:31
Wohnort: Frankfurt am Main

Re: Regex - brauche Nachhilfe

Beitragvon peter67 » Mo 10 Jul, 2017 13:22

motorang hat geschrieben:das funktioniert schon mal super, wenn nur ein Link pro Zeile drin ist - danke!


pragmatischer Ansatz, versuche mal jedes
Code: Alles auswählen
[/url]
durch ein
Code: Alles auswählen
[/url]
+ Zeilenumbruch zu ersetzen. Geht eventuell mit
Code: Alles auswählen
\n


Der zeilenumbruch im HTML sollte ja nichts ausmachen, und dann hättest du sicher in jeder Zeile nur mehr einen link.
I love deadlines. I like the whooshing sound they make as they fly by. (Douglas Adams)
Benutzeravatar
peter67
Wenigschreiber
 
Beiträge: 778
Registriert: Mi 22 Mai, 2013 13:34
Wohnort: Salzburg

Re: Regex - brauche Nachhilfe

Beitragvon Thomas Heyl » Mo 10 Jul, 2017 13:48

Guter Tipp, Peter!

:smt023 , Langer
Benutzeravatar
Thomas Heyl
verstorben
 
Beiträge: 961
Registriert: Di 20 Dez, 2016 16:31
Wohnort: Frankfurt am Main


Zurück zu Forum und motorang.com

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste