Ich versuche gerade, diese riesege Perl-RegExp zur Prüfung der Korrektheit der Syntax einer URL nach PHP zu übersetzten. Leider bekomme ich immer die Meldung "Warning: Unknown modifier '*' in [...]\linkcheck.php on line 100". Zeile 100 ist dabei die Zeile mit dem preg_match Aufruf.
// Basic definitions:
$lowalpha = '(?:[a-z])';
$hialpha = '(?:[A-Z])';
[..]
$url = "$httpurl$ftpurl$newsurl$nntpurl$telneturl$gopherurl$waisurl$mailtourl$fileurl$prosperourl";
$check = preg_match("!$url!", $HTTP_GET_VARS["test"]);
Meines Erachtens nach gehört so ein Muster in zwei Schrägstriche verpackt, nicht in zwei Ausrufungszeichen. Zumindest ist es in PHP und Javascript so, und ich möchte glatt behaupten, daß es in Perl nicht anders ist (aber da kann ich mich irren).
Das würde auch die Meldung betreffs des "modifiers" erklären, denn die stehen _außerhalb_ des Musters und modifizieren seine Verarbeitung (siehe PHP-Anleitung, Kapitel "Regular Expression Functions (Perl)", Seite "Pattern Modifiers").
Davon unabhängig solltest Du erstmal selbst versuchen, das Monstrum in seine Einzelteile zu zerlegen (die ja erfreulicherweise eindeutig vorhanden sind) und Stück für Stück einer Leibesprüfung unterziehen, um das unverschämte Sternchen zu umzingeln und anschließend unschädlich zu machen.
Gruß,
soenk.e