Опять же, похоже, что проблема здесь не в том, что ваш RegEx недостаточно мощный, просто неправильно набран (закрывающий разделитель в середине строки). Я оставлю это для потомков, но я настоятельно рекомендую вам проверить PHP parse_url()
метод.
Это должно адекватно доставить:
substr($s = basename($_SERVER['REQUEST_URI']), 0, strrpos($s,'.') ?: strlen($s))
Но это лучше:
preg_replace('/[#\.\?].*/','',basename($path));
Хотя, ваш пример короткий, поэтому я не могу сказать, хотите ли вы сохранить весь путь или только его последний элемент. Предыдущий пример сохранит только последний фрагмент, но он должен сохранить весь путь, будучи достаточно универсальным, чтобы работать практически со всем, что может быть вам брошено:
preg_replace('~(?:/$|[#\.\?].*)~','',substr(parse_url($path, PHP_URL_PATH),1));