Christopher: Regulärer Ausdruck überprüft URL inkorrekt

Hallo,

im Folgenden werde ich meinen regulären Ausdruck in mehreren Teilen posten, wobei ich jene Teile mit ">" beginne und mit "<" beende. Diese Zeichen bitte nicht mitinterpretieren ;)

optionales Protokoll

(?:http://)<

Die Domäne mit allen legalen Zeichen + . am Ende

[a-zA-Z0-9][a-zA-Z0-9._-]*.<

optionale beliebig viele Subdomains

(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*<

Länderkürzel

[a-zA-Z]{2,5}<

optional viele Unterverzeichnisse

(?:/[a-zA-Z0-9_%,.=?-]*)*<

optional beendender Slash

(?:/)<

Dummerweise klappt der Ausdruck nicht ;)
Kann jemand den Fehler finden?

Danke euch!!

  1. Hallo,
    mit welchem Befehl verarbeitest du den Ausdruck und evt. mal den Script posten ;)

    MFG
    Andavos

    1. Hier nochmal der komplette Ausdruck:

      (?:http://)[a-zA-Z0-9][a-zA-Z0-9._-]*.(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*[a-zA-Z]{2,5}(?:/[^\/:\*?"<>|]*)*(?:/[a-zA-Z0-9_%,.=?-#&]*)*(?:/)

  2. Okay, ich hatte eh direkt nen Fehler in der Angabe für die Unterverzeichnisse. Ich geb mal gekürzten Code an:

    -----------------------------------------------------------------------
    function check_URL($url) {
    $protocol = '(?:http://)';
    $domain_main = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
    $domain_sub = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
    $laenderkrzl = '[a-zA-Z]{2,5}';
    $unterverz = '(?:/[^\\/:\*?"<>|]*)*';
    $rest = '(?:/[a-zA-Z0-9_%,.=?-#]*)*';
    $ende = '(?:/)';
    $domain = "$domain_main$domain_sub$laenderkrzl$unterverz$rest$ende";
    $regExp = "$protocol$domain";
    echo "<span style="font-size:150%">".$regExp."</span><br>";
    return preg_match("/^$regExp$/",$url);
    }
    if (check_URL("http://forum.de.selfhtml.org/?t=104217&m=642340#antworten") echo "korrekte URL!";
    -----------------------------------------------------------------------

  3. Okay, habs jetzt doch noch hinbekommen. Hier zum Merken ( :) ):

    (?:http://)[a-zA-Z0-9][a-zA-Z0-9._-]*.(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*[a-zA-Z]{2,5}(?:/[^\/:\*?"<>|]*)*(?:/[a-zA-Z0-9_%,.=?-#&]*)*

  4. Moin,

    Länderkürzel

    [a-zA-Z]{2,5}<

    Hast du irgendwelche moralischen Prinzipien die dich die gTLD .museum nicht mögen lassen oder ist das nur ein Versehen? Mach besser + statt {2,5}, denn mir fällt auf Anhieb keine Regel ein die die Länge der TLD irgendwie beschränken würde. (Jetzt mal davon abgesehen, dass Domainparts nur 64(?) Zeichen haben dürfen.)

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~