Regex Ausdruck für mehrere Urls
Hallo, ich benötige wieder mal Hilfe. Ich suche einen passenden regex Ausdruck für eine bestimmte Url Struktur einer Site..
Die folgenden Url-Strukturen solen mit einem Regex Ausdruck erfasst werden,
leider komm ich nicht zu dem gewünschten Ergebnis
Unterstützt müssen folgende Urls werden:
www.domain.com = root
www.domain.com/de = root mit gewählter Sprache( alternativ auch fr, it usw.)
www.domain.com/de/ = root mit gewählter Sprache
www.domain.com/de/function/name_der_funktion/123 = funkttionen wie Login usw.
www.domain.com/de/admin/name_der_adminfunktion/123 = diverse Admin Seiten
www.domain.com/de/account/name_der_accountfunktion/123 = diverse Account Seiten der user
www.domain.com/de/Kategoriename/12345 = kategorieseite
www.domain.com/de/kategoriename/Artikelname/12345,98765 = Artikelseite, wobei 12345 = KategorieID und 98765 = ArtikelID
Ausser bei der root Seite kommt überall die Sprache dazu.
Wichtig sind folgende Teile der Url:
de = Sprachauswahl
function|admin|account zusammen mit der Zahl am Ende der Url (= bestimmt die eigentliche Funktion)
Die Zahl bei Kategorieseiten ergibt die KategorieID (der text davor ist egal)
Die Zahlen bei Artikelseiten ergeben die Artikel ID (der text davor ist egal)
Die texte bzw. Namen der Funktionen dazwischen sing egal.
leider bekomm ich es nicht hin, daß die Zahlen, sofern vorhanden, immer in ein und er selben $match-Gruppe stehen (zB $macht[4])eine nichtgenutzte leer bleibt. Mein bisheriger Ansatz sieht so aus:
preg_match("#^\/([de|fr|it]{2})?\/?([\w\-]*)\/?([\w\-]*)?\/?([\d]+,?[\d]*)?$#i", $_SERVER['REQUEST_URI'], $match);
Wer kann mir da weiterhelfen?
Lg, ChrisFah
Die folgenden Url-Strukturen solen mit einem Regex Ausdruck erfasst werden,
leider komm ich nicht zu dem gewünschten Ergebnis
Unterstützt müssen folgende Urls werden:
www.domain.com = root
www.domain.com/de = root mit gewählter Sprache( alternativ auch fr, it usw.)
www.domain.com/de/ = root mit gewählter Sprache
www.domain.com/de/function/name_der_funktion/123 = funkttionen wie Login usw.
www.domain.com/de/admin/name_der_adminfunktion/123 = diverse Admin Seiten
www.domain.com/de/account/name_der_accountfunktion/123 = diverse Account Seiten der user
www.domain.com/de/Kategoriename/12345 = kategorieseite
www.domain.com/de/kategoriename/Artikelname/12345,98765 = Artikelseite, wobei 12345 = KategorieID und 98765 = ArtikelID
Ausser bei der root Seite kommt überall die Sprache dazu.
Wichtig sind folgende Teile der Url:
de = Sprachauswahl
function|admin|account zusammen mit der Zahl am Ende der Url (= bestimmt die eigentliche Funktion)
Die Zahl bei Kategorieseiten ergibt die KategorieID (der text davor ist egal)
Die Zahlen bei Artikelseiten ergeben die Artikel ID (der text davor ist egal)
Die texte bzw. Namen der Funktionen dazwischen sing egal.
leider bekomm ich es nicht hin, daß die Zahlen, sofern vorhanden, immer in ein und er selben $match-Gruppe stehen (zB $macht[4])eine nichtgenutzte leer bleibt. Mein bisheriger Ansatz sieht so aus:
preg_match("#^\/([de|fr|it]{2})?\/?([\w\-]*)\/?([\w\-]*)?\/?([\d]+,?[\d]*)?$#i", $_SERVER['REQUEST_URI'], $match);
Wer kann mir da weiterhelfen?
Lg, ChrisFah
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 202240
Url: https://administrator.de/forum/regex-ausdruck-fuer-mehrere-urls-202240.html
Ausgedruckt am: 26.12.2024 um 22:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
erster Punkt der mir auffällt ist folgenderfindet nicht de oder fr oder it sondern Zeichenfolgen wie dfi, eft usw.
[de|fr|it] bedeutet eines der beiden Zeichen 'd' oder 'e' oder eines der beiden Zeichen 'f' oder 'r' usw.
Du meinst vermutlich (de|fr|it)
Und bitte erklär mal genauer, welchen output Du erwartest. Welche Datenstruktur soll denn die extrahierten Daten enthalten?
Markus
Korrektur: der Code ([de|fr|it]{2}) findet tatsächlich die Zeichenfolgen de, fr und it, der Fehler ist aber, dass er auch Zeichenfolgen wie dd, ee, ff usw. findet.
erster Punkt der mir auffällt ist folgender
[de|fr|it]
[de|fr|it] bedeutet eines der beiden Zeichen 'd' oder 'e' oder eines der beiden Zeichen 'f' oder 'r' usw.
Du meinst vermutlich (de|fr|it)
Und bitte erklär mal genauer, welchen output Du erwartest. Welche Datenstruktur soll denn die extrahierten Daten enthalten?
Markus
Korrektur: der Code ([de|fr|it]{2}) findet tatsächlich die Zeichenfolgen de, fr und it, der Fehler ist aber, dass er auch Zeichenfolgen wie dd, ee, ff usw. findet.
Hi ChrisFah,
wie wäre es wenn du "named groups" verwendest ? In deinem Beispiel würde die Regex z.B. so aussehen:
Dann kannst du auf die jeweiligen Gruppen in dieser Art zugreifen:
Eine named group wird nach folgendem Schema erstellt:
Das sollte dein Problem lösen.
p.s. Ein Programm das bei Regex-Problemen sehr gute Unterstützung bietet -> RegexBuddy
Grüße Uwe
wie wäre es wenn du "named groups" verwendest ? In deinem Beispiel würde die Regex z.B. so aussehen:
"#^\/(?P<language>de|fr|it)?\/?(?P<hauptfunktion>[\w\-]*)?\/?(?P<unterfunktion>[\w\-]*)?\/?(?P<numbers_part1>[\d]+)?,?(?P<numbers_part2>[\d]*)?$#i"
$match['language']
$match['hauptfunktion']
$match['unterfunktion']
$match['numbers_part1']
$match['numbers_part2']
(?P<GRUPPENNAME>.....)
p.s. Ein Programm das bei Regex-Problemen sehr gute Unterstützung bietet -> RegexBuddy
Grüße Uwe