Вам, вероятно, не нужно регулярное выражение для этого. Разница в шаблоне очень мала, и сами разделители (/
, а иногда ?
, =
или #
) неизменны. Я рекомендую вам сделать это поэтапно, используя обычные манипуляции со строками для определения следующего шага:
- Разделить URL на
/
.
- Игнорировать
http://
и www.
, если есть.
- Убедитесь, что доменное имя
youtube.com
или youtu.be
.
- Если DN равен
youtu.be
, идентификатор является следующим сегментом. Верни его и остановись.
- Запустить анализ параметров. Проверьте следующий сегмент:
- Если это
embed
, вернуть следующий сегмент полностью.
- Если это
v
, разделить на ?
и вернуть первую часть.
- Если это
user
, посчитайте четыре сегмента вперед, и у вас будет свой ID.
- Если это
watch
, разделить на ?
, а затем на =
.
... и т.д..
Я не знаю, сколько возможных шаблонов существует для URL-адресов YouTube, но если у вас есть полный список форматов, вы можете просто создать вокруг них дерево if / else. Мой основной совет - просто разделить на /
и перейти оттуда, используя контекстные подсказки в URL, чтобы определить, как анализировать остальную часть.