Regex-Problem - letzter Eintrag auslesen

bluemirko

Grünschnabel
Hallo Leute,

ich möchte eine ID aus einem Link auslesen und habe mir da schon ein Regex zusammengebastelt. Meine Lösung bisher sieht so aus:

PHP:
$link = 'http://www.meinedomain.de/bla/blabla/id1234567890?a=bla&b=bla';
preg_match('/\/id(.*?)\?/', $link, $erg);
$id = $erg[1];

Normalerweise kommt dann folgendes raus:

PHP:
$id = '1234567890';

Das Problem ist jetzt nur, dass der Link auch schon vorher "/id" enthalten kann:

PHP:
$link = 'http.//www.meinedomain.de/bla/idbla/id1234567890?a=bla&b=bla';

Dann käme bei meinen Regex dann das heraus:

PHP:
$id = 'bla/id1234567890';

Meine Frage wäre jetzt, wie ich das letzte "/id" auslesen kann. Ich bin da gerade etwas überfragt. Gerne auch über eine ganz andere Lösung, jedoch kann die ID unterschiedlich lang sein. Vorher steht aber immer "/id" und nachher "?" - deshalb habe ich hier diese Lösung gewählt.

Vielen Dank schon mal für Eure schnelle Hilfe!
 
Also so?

PHP:
preg_match('/\/id([0-9]*?)\?/', $link, $id);

Hab ich ausprobiert, trotzdem spuckt er mir aber wieder alles ab dem ersten "/id" aus.
 
Also ich bekomme mit:
PHP:
<?php

$link = 'http.//www.meinedomain.de/bla/idbla/id1234567890?a=bla&b=bla';
preg_match('/\/id([0-9]*?)\?/', $link,$erg);
echo $erg[1]
?>
1234567890 heraus.
 
Hm, das ist merkwürdig... Dann muss ich mit den Links wohl mal genauer werden, vielleicht liegt der Fehler ja woanders. Konkret lese ich eine XML von iTunes aus und erhalte 100 Links der einzelnen Einträge. Der fehlerhafte Link verhält sich wie folgt:

PHP:
$link = 'http://itunes.apple.com/de/app/identalcare/id537908183?mt=8&ign-mpt=uo';
preg_match('/\/id([0-9]*?)\?/', $link, $erg);
$id = $erg[1];

Im Ergebnis habe ich dann folgendes zu stehen:

[96] => entalcare/id537908183

Da ich die einzelnen IDs dann noch durch die iTunes Store Websearch API schicke, kommt das dann zu einer Fehlermeldung, die ich schon vorher ausschließen muss.
 
Zuletzt bearbeitet:
..., wie ich das letzte "/id" auslesen kann. Ich bin da gerade etwas überfragt. Gerne auch über eine ganz andere Lösung, jedoch kann die ID unterschiedlich lang sein. Vorher steht aber immer "/id" und nachher "?" ...
Hallo,
vielleicht so?
PHP:
// String zerlegen:
$arr = explode('/id',$link);
// letztes Arrayelement zerlegen:
$arr = explode('?',array_pop($arr));

// Ergebnis steht jetzt im ersten Arrayelement:
$result = $arr[0];
 
Ah, danke noch an alle! Bereits die erste Lösung funktioniert für mich einwandfrei!

Ich hatte nur den Fehler gemacht, den Code in die falsche Funktion zu schreiben - und mich dann gewundert, warum sich daran nichts ändert :D

Ich erkläre hiermit den Post für geschlossen.
 
Zurück