Разделите его на части и получите последний элемент:
$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];
Редактировать: Для поддержки канонических URL-адресов в стиле Apache rtrim
удобно:
$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];
Другой пример, который я мог бы счесть более читабельным: ( Демо ):
$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
В этом примере также учитывается работа только по пути URL.
Еще одно редактирование (спустя годы), канонизация и простое альтернативное использование UTF-8 (через регулярное выражение PCRE в PHP):
<?php
use function call_user_func as f;
use UnexpectedValueException as e;
$url = 'http://example.com/artist/song/music-videos/song-title/9393903';
$result = preg_match('(([^/]*)/*$)', $url, $m)
? $m[1]
: f(function() use ($url) {throw new e("pattern on '$url'");})
;
var_dump($result); # string(7) "9393903"
Что довольно грубо, но показывает, как обернуть это в preg_match
вызов для более детального управления через шаблон регулярного выражения PCRE. Чтобы добавить некоторый смысл этому голому металлическому примеру, он должен быть обернут внутри собственной функции (что также сделало бы излишний псевдоним). Просто представил этот способ для краткости.