regexp
lois
- perl
0 Cheatah0 lois
0 Andres Freund0 lois0 Andres Freund0 lois
0 solution
hi,
kann ich mit regexp folgendes problem lösen?
$insertdir = "http://ibin.net/bled/";
$line = '<a href="http://irgendwas.com/file.htm"><img src="images/pic.gif"></a>';
es geht jetzt darum, dass ich in allen zeilen eines files ($line nur als bsp) wo ein relativer pfad ist das $insertdir davorsetze.
$line =~ s/((href *= *["'])|(src *= *["'])|(url *())/"$1$insertdir"/ieg;
gibt aber in dem fall:
'<a href='http://ibin.net/bled/http://irgendwas.com/file.htm'><img src='http://ibin.net/bled/images/pic.gif'></a>'
^ sollte hier nicht eingefügt werden, da eh schon absolute url.
jemand eine idee, wie ich verhindern kann dass $insertdir auch vor absolute urls gesetzt wird?
lg, lois.
Hi,
jemand eine idee, wie ich verhindern kann dass $insertdir auch vor absolute urls gesetzt wird?
indem Du nicht "plump" ersetzt, sondern analysierst. Es sei denn, es gelingt Dir, die RegExp so zu gestalten, dass eine absolute URI erkannt wird (bzw. eben gerade nicht).
Cheatah
Hi,
hi,
indem Du nicht "plump" ersetzt, sondern analysierst.
schon klar
Es sei denn, es gelingt Dir, die RegExp so zu gestalten, dass eine absolute URI erkannt wird (bzw. eben gerade nicht).
das wärs eben.
lg, lois
Hi Lois,
jemand eine idee, wie ich verhindern kann dass $insertdir auch vor absolute urls gesetzt wird?
Ja, prüfe ob die Url ein relativer oder ein absolute Pfadangabe ist. Am besten, in dem du einfach den Anfang der Url auf http:// und ähnliche Protokolle prüfst (ftp, gopher nntp...).
Ausserdem würde ich deinen regex nocheinmal überarbeiten, der ist noch nicht wirklich gut. Was soll eigentlich das e flag hinter deinem Regex? Ich sehe hier in diesem Fall keinen sinn dafür.
Grüße Andres Freund
Hi Lois,
hi,
Ja, prüfe ob die Url ein relativer oder ein absolute Pfadangabe ist. Am besten, in dem du einfach den Anfang der Url auf http:// und ähnliche Protokolle prüfst (ftp, gopher nntp...).
ok, wollt nur wissen obs vielleicht auch in einer regexp geht
Ausserdem würde ich deinen regex nocheinmal überarbeiten, der ist noch nicht wirklich gut.
bitte um vorschläge
Was soll eigentlich das e flag hinter deinem Regex? Ich sehe hier in diesem Fall keinen sinn dafür.
sonst nimmt er mir das $1 nicht
lg, lois
Hi Lois,
bitte um vorschläge
s/(<\w{1,}[^>]{1,})(src|href)="([^"]{1,})"([^>]{0,}>)/$1 $2="$prefix$3"$4/g;#Irgendwie sieht das ein wenig krytisch aus;-)
Wobei $prefix die Url ist, die davor stehen soll;
sonst nimmt er mir das $1 nicht
Sollte er aber eigentlich. e ist doch dafür da, dass man so sachen wie pack oder so einsetzten kann. Bei mir funktioniert es zumindest.
Grüße Andres Freund
Hi Lois,
hi,
s/(<\w{1,}[^>]{1,})(src|href)="([^"]{1,})"([^>]{0,}>)/$1 $2="$prefix$3"$4/g;
damit hätte sich das mit der rätselaufgabe auch erledigt:)
»»Irgendwie sieht das ein wenig krytisch aus;-)
schaut gut aus :D
sonst nimmt er mir das $1 nicht
Sollte er aber eigentlich. e ist doch dafür da, dass man so sachen wie pack oder so einsetzten kann. Bei mir funktioniert es zumindest.
hat mich auch gewundert...
thx + lg, lois
damit funktionierts:
@items = split (/(href|src|url)/i, $line);
for (@items) { s/(=? *["'(])/"$1$insertdir"/ie unless (/((file|https?|gopher|ftp)://)|(mailto:|news:)/i);}
$line = join ("", @items);
rätselaufgabe:
das in einer einzigen regexp.
lg, lois