Извлечь ключ из URL с помощью Preg_Match в PHP - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть этот URL https://test.com/file/5gdxyYpb#_FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE

Мне нужно создать с помощью preg_mach это условие:

$match[0]=5gdxyYpb#_FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE

$match[1]=5gdxyYpb

$match[2]=_FWRc4T12baPrppZIwVQ5i18Sq16f7TXU82LJwY_BjE

Я пробую схему различий, которую закрыл мос, был этот. e\/(.*?)\#(.*).

Пожалуйста, любые рекомендации. (При необходимости в Preg_Match).

Спасибо,

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете использовать 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
)
...