Noch ein regulärer Ausdruck (RegExp)

daddz

Mitglied
Hey Leute!

Ich bekomm diesen regulären Ausdruck einfach nicht hin.
Er soll folgende Muster erkennen:
Das soll er auch für andere Protokolle wie z.B. https.
Das wichtige ist aber, das es unbedingt "abc.de" sein muss. Soll heißen das er nur Links von meiner abc.de-Seite finden soll.
Hier mein bisheriger Ansatz:
Code:
^(http|https)://([a-zA-Z0-9]*.)?abc.de(.*)
Ich hoffe ihr könnt mir helfen.
 
PHP:
<?php
$strings = array(
    "http://abc.de",
    "http://abc.de/xyz/asdf",
    "http://xy.abc.de",
    "http://xy.abc.de/zzz",
    "https://xy.abc.de/zzz",
    "http://xy.cba.de/zzz",
    );

foreach ( $strings as &$string ) {
    preg_match( "%^(?:http://|https://)(?:[\-a-z0-9]+\.)*abc.de(?:|/.*)$%Uis", $string, $matches );
    var_dump( $matches );
}
Erzeugt folgende Ausgabe:
Code:
array(1) {
  [0]=>
  string(13) "http://abc.de"
}
array(1) {
  [0]=>
  string(22) "http://abc.de/xyz/asdf"
}
array(1) {
  [0]=>
  string(16) "http://xy.abc.de"
}
array(1) {
  [0]=>
  string(20) "http://xy.abc.de/zzz"
}
array(1) {
  [0]=>
  string(21) "https://xy.abc.de/zzz"
}
array(0) {
}

Den letzten Teil kannst du sogar noch vereinfachen, finde es aber so eindeutiger - Geschmackssache im Endeffekt. Hoffe, du findest dich zurecht, ansonsten einfach nachfragen ;)
 
Mein Vorschlag:
Code:
^https?://(?:[a-zA-Z0-9]|[a-zA-Z0-9](?:[a-zA-Z0-9]|-)*[a-zA-Z0-9]\.)?abc\.de(?:/(?:[a-zA-Z0-9$\-_.+!*'(),;:@&=]+|%[0-9a-fA-F]{2}))*$
Entspricht der Spezifikation gemäß RFC 1738.
 
Hmm...der sieht auch gut aus!

Wie kann ich bewerkstelligen, dass in einem RegExp etwas ausgeschlossen wird?
Ich möchte z.B. keine Dateien mit den Endungen .tgz, .gz oder .bz2 finden.
 
Zurück