punkt negieren??? RE
christian
- perl
hallo,
ich schreibe mir gerade ein script was Pfade in einer website auf absolute pfade umwandelt. Jedenfalls pfade wie /bild.jpg in http://www.test.de/bild.jpg.
Allerdings will ich dabei erstmal relative Pfade ausschließen und dachte eigentlich durch folgenes Muster werden zwei punkte ignoriert, aber wenn ich es mache wird überhaupt kein Pfad geändert:
s/SRC ?= ?"[^.]^."/SRC="http://www.test.de$1"/gi
weiß jemand was ich falsch mache?
ps: vielleicht kann mir ja auch jemand ein tool empfehlen was auch relative Pfade umgenerieren kann.. weil sonst muss ich das wohl ins script einbauen.
grüße
christian
hallo,
bin inzwischen ein wenig weiter gekommen, das auschließen des Punktes hat funktioniert, wieso auf einmal weiß ich auch nicht genau:-)
aber jetzt komme ich nicht mehr weiter:
folgene Ausgangssituation:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="bild.jpg" border="0" />
<IMG SRC="/bild.jpg" border="0" />
das soll umgewandelt werden in:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
mein RE:
$line =~ s/SRC ?= ?"[^.]/?(.*)[" ]/SRC="http://www.test.de/$1"/gi;
sieht für eigentlich richtig aus nur leider kommt das bei raus:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
<IMG SRC="http://www.test.de/ild.jpg" border="0" />
----------------------------^---------------------FEHLER
warum verschlunkt er den ersten buchstaben beim letzten bild?
grüße christian
Hallo Namensvetter,
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="bild.jpg" border="0" />
<IMG SRC="/bild.jpg" border="0" />das soll umgewandelt werden in:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />mein RE:
$line =~ s/SRC ?= ?"[^.]/?(.*)[" ]/SRC="http://www.test.de/$1"/gi;
Besser:
$line =~ s~src\s?=\s?("')([^.][^\1])\1~src=$1http://www.test.de/$2$1~ig;
<IMG SRC="http://www.test.de/ild.jpg" border="0" />
warum verschlunkt er den ersten buchstaben beim
letzten bild?
[^.] matcht auch auf ein Zeichen. Auf das b, in
diesem Fall.
Gruesse,
CK
hallo,
Besser:
$line =~ s~src\s?=\s?("')([^.][^\1])\1~src=$1http://www.test.de/$2$1~ig;
2 Sachen einmal:
Gehört der teil ("') nicht so: (["'])?
Und dann hab ich noch nicht genau verstanden was folgenes Macht:
([^.][^\1])\1
(geht auch noch nicht richtig) Was macht das \1?
grüße christian
Hallo christian,
*seufz* das naechste mal poste ich nicht mehr,
wenn ich derart muede bin.
$line =~ s~src\s?=\s?("')([^.][^\1])\1~src=$1http://www.test.de/$2$1~ig;
2 Sachen einmal:
Gehört der teil ("') nicht so: (["'])?
Ja.
Und dann hab ich noch nicht genau verstanden was folgenes Macht:
([^.][^\1])\1
Der muss auch so heissen:
([^.].+?)\1
(geht auch noch nicht richtig) Was macht das \1?
\1 ist die Rueckwaertsreferenz auf die erste
Klammer.
Gruesse,
CK
hallo,
Der muss auch so heissen:
([^.].+?)\1
das geht danke... nur eine Sache fehlt noch hab schon hin und her probiert komm aber nicht drauf wie ichs auschließen kann:
Ausgang:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="/bild.jpg" border="0" />
<IMG SRC="bild.jpg" border="0" />
Ergebnis:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de//bild.jpg" border="0" />
-----------------------------^-----------------------
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
beim zweiten bild ist der slash jetzt doppelt und egal wie ich es mache, entweder es fehlt der erste Buchstabe, oder der Slash ist doppelt drin.
hast du da ne lösung?
grüße christian
Hallo christian,
<IMG SRC="/bild.jpg" border="0" />
[...]
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de//bild.jpg" border="0" />
beim zweiten bild ist der slash jetzt doppelt
und egal wie ich es mache, entweder es fehlt der
erste Buchstabe, oder der Slash ist doppelt drin.hast du da ne lösung?
s!//!/!g;
Gruesse,
CK
s!//!/!g;
tr!/!!s
use Benchmark;
hi christian!
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="bild.jpg" border="0" />
<IMG SRC="/bild.jpg" border="0" />soll umgewandelt werden in:
<IMG SRC="../bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
<IMG SRC="http://www.test.de/bild.jpg" border="0" />
$line=~s~src\s?=\s?"(?!.)/?(.+?)"~src="http://www.test.de/$1"~ig;
^^
zero-width negative look-ahead (http://www.perldoc.com/perl5.8.0/pod/perlre.html#Extended-Patterns)
prost
seth
[ot]
ps. es hat mich verwirrt, dass die aufforderung "Sie haben mehr als 25% zitierte Zeilen in Ihrem Posting. Sind Sie sicher, dass Sie das Posting so abschicken wollen?" als frage formuliert ist. vielleicht ist es aber auch tatsaechlich eine frage und ich habe nur aus doofheit nicht den "ja-knopf" gefunden.
hmmm, ich antworte einfach mal an dieser stelle mit einem deutlichen "ja!".
hallo,
ich schreibe mir gerade ein script was Pfade in einer website auf absolute pfade
umwandelt. Jedenfalls pfade wie /bild.jpg in http://www.test.de/bild.jpg.
Bereits alles durcheinander. "http://www.test.de/bild.jpg" ist kein Pfad.
Ansonsten empfehle ich dir File::Spec und HTML::Parser. HTML mit regulären Ausdrücken zu verarbeiten ist ein _sehr_ kurzsichtiger Ansatz. Extrahiere lieber mit einem richtigen Parser die relevanten Informationen und verarbeite sie dann separat. Nicht alles auf einmal!