ubuntuusers.de

Perl Variable in Regex

Status: Gelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

Logaff

Anmeldungsdatum:
27. Januar 2009

Beiträge: 53

Wohnort: Rostock

Hiho,

dies geht raus an alle Perl-Programmierer :-p

Erst code danach frage:-p

1
2
3
4
5
6
7
8
9
###Dieser Code funktionier####
	if($uflinks[$i]=~m/filesonic.com\/file|uploading.com\/files|depositfiles.com\/files|wupload.com\/file/g){
		$dlinks[$dlinkscounter]=$uflinks[$i];
	}
###Dieser Nicht###
my $regex = "filesonic.com\\/file|uploading.com\\/files|depositfiles.com\\/files|wupload.com\\/file/"
	if($uflinks[$i]=~m/$regex/g){
		$dlinks[$dlinkscounter]=$uflinks[$i];
	}

im oberen Code wurde der Regex erst mal statisch von mir erzeugt. Ziel ist es jedoch das der Regex dynamisch aus nen Arrayinhalt erstellt wird, dies gelingt auch schon und es entsteht ein valider Regex-Code jedoch weiss ich nicht wie ich das ganze jetzt als Variable benutz-> siehe Codeabschnitt 2.

wäre nett wenn mir jmd bei diesem problem helfen könnte. mfg, Logaff

zimon23

Avatar von zimon23

Anmeldungsdatum:
8. Dezember 2007

Beiträge: 29

Hallo Logaff,

Grundsätzlich hast Du das schon richtig gemacht. Das einzige, was mir auffällt ist das Ende in der regex Variablen. Dort hast du einen Slash am Ende, den Du auch nicht escaped hast. Versuchs mal mit

my $regex = "filesonic.com\\/file|uploading.com\\/files|depositfiles.com\\/files|wupload.com\\/file";

Viele Grüße, zimon

fckawe

Avatar von fckawe

Anmeldungsdatum:
23. April 2011

Beiträge: 509

Wohnort: Freiburg im Breisgau

Ich bin kein Perl-Programmierer, aber... 😉

  1. Du hast wohl in der Zeile my $regex... das abschließende Semikolon vergessen. (merke das nur an, weil es ja scheinbar nicht dein (halb-)funktionierendes Beispiel ist, das du hier reinkopiert hast. So wie es da steht, wird es ja nicht kompiliert...)

  2. Das was zimon23 geschrieben hat, war mir auch aufgefallen. Der Slash ist zuviel...

  3. Was mir auch aufgefallen ist (das kann nun aber auch daran liegen, dass ich eben nicht in der Perl-Welt zu Hause bin): dein Beispiel würde (lässt man mal die beiden vorigen Punkte außer Acht) wohl funktionieren. Scheinbar läuft immer der zweite Regex-Match auf false. Wenn du die beiden vertauschst, läuft der mit der Variable und dafür der andere nicht mehr. Zumindest hatte ich das bei meinen Versuchen gerade so beobachtet. Vielleicht ist das auch Quatsch - wie gesagt: nur als Tipp. Und woran das liegen könnte, falls es kein Quatsch ist, kann ich dir leider nicht sagen.

Gruß, Gerald

EDIT: scheinbar läuft jeder zweite Match auf ein und die selbe String-Variable auf false?! Habe gerade noch ausprobiert, den zweiten Match auf eine andere String-Variable zu machen (mit gleichem Inhalt). Dann hat's wieder funktioniert...

Logaff

(Themenstarter)

Anmeldungsdatum:
27. Januar 2009

Beiträge: 53

Wohnort: Rostock

also bis heut morgen um 5 hab ich gebraucht und ist nun meine lösung:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
my @hosterlist= ('uploading.com\/files','filesonic.com\/file','depositfiles.com\/files','wupload.com\/file');
my $numberofhosts = @hosterlist;
my $linkregex = "/";

for(my $i =0;$i <$numberofhosts;$i++){
	if($i<=$numberofhosts-2){
	$linkregex.=($hosterlist[$i]."|");
	}
	else{
	$linkregex.=$hosterlist[$i];
	}
}
$linkregex.="/";
###paar zeilen zwischen code bis:

if($uflinks[$i]=~$linkregex)#usw
Antworten |