Вы можете использовать 2 группы захвата и использовать \K
, чтобы не совпадать с первой частью URL для получения желаемых совпадений.
https?://.*/\K([^#\s]+)#(\S+)
https?://
Сопоставить протокол с необязательные s, затем ://
.*/
Соответствие до последнего вхождения /
\K
Забудьте, что соответствует до здесь ([^#\s]+)
Захват группа 1 , соответствует 1+ вхождений любого символа, кроме #
или пробельных символов #
Соответствует #
(\S+)
Capture группа 2 , соответствие 1+ вхождений непробельного символа
Regex demo | Php демо
$url = "https://test.com/file/5gdxyYpb#_FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE";
$pattern = "~https?://.*/\K([^#]+)#(.*)~";
$res = preg_match($pattern, $url, $matches);
print_r($matches);
Выход
Array
(
[0] => 5gdxyYpb#_FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE
[1] => 5gdxyYpb
[2] => _FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE
)