Maison >développement back-end >tutoriel php >Comment puis-je extraire les identifiants de vidéos YouTube à partir de texte à l'aide d'expressions régulières ?

Comment puis-je extraire les identifiants de vidéos YouTube à partir de texte à l'aide d'expressions régulières ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 19:19:12712parcourir

How Can I Extract YouTube Video IDs from Text Using Regular Expressions?

Recherche d'identifiants de vidéos YouTube à partir d'un texte avec des expressions régulières

Votre objectif est d'identifier toutes les URL de vidéos YouTube et de récupérer leurs identifiants correspondants à partir d'un texte champ. Les expressions régulières offrent un outil puissant pour accomplir cette tâche.

Comprendre les formats d'URL YouTube

Les URL YouTube se présentent sous diverses formes, notamment :

  • Format court : https://youtu.be/NLqAF9hrVbY
  • Intégrer l'iframe : https://www.youtube.com/embed/NLqAF9hrVbY
  • Page de lecture : https://www.youtube.com/watch?v=NLqAF9hrVbY

Regex pour l'extraction d'ID vidéo YouTube

Vous trouverez ci-dessous une expression régulière qui correspond à tous ces formats et capture la vidéo YouTube ID :

https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&amp;+%\w.-]*(?:['"][^<>]*>|</a>))[?=&amp;+%\w.-]*

Explication Regex

  • https?:// : correspond à la partie schéma de l'URL (HTTP ou HTTPS).
  • (?:[0-9A-Z-] .)? : Facultatif partie de sous-domaine (par exemple, www.).
  • (?:youtu.be/|youtube(?:-nocookie)?.comS*?1) : Correspond à la partie hôte YouTube. Il gère plusieurs sous-domaines et formats.
  • ([w-]{11}) : capture l'ID de la vidéo YouTube, qui se compose d'exactement 11 caractères alphanumériques et traits d'union.
  • (?=2|$) : affirme que le caractère suivant après l'ID est soit un caractère autre qu'un mot, soit la fin de la chaîne.
  • (?![?=& %w.-](?:['"]3>|))[?=& %w.-] * : analyse anticipée négative pour exclure les URL pré-liées.

Exemple Code

En PHP, vous pouvez utiliser la fonction suivante pour remplacer les URL des vidéos par des liens :

function linkifyYouTubeURLs($text) {
    $text = preg_replace('~(?#!js YouTubeId Rev:20160125_1800)
        # Match non-linked youtube URL in the wild. (Rev:20130823)
        https?://          # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)?  # Optional subdomain.
        (?:                # Group host alternatives.
          youtu\.be/       # Either youtu.be,
        | youtube          # or youtube.com or
          (?:-nocookie)?   # youtube-nocookie.com
          \.com            # followed by
          \S*?             # Allow anything up to VIDEO_ID,
          [^\w\s-]         # but char before ID is non-ID char.
        )                  # End host alternatives.
        ([\w-]{11})        # : VIDEO_ID is exactly 11 chars.
        (?=[^\w-]|$)       # Assert next char is non-ID or EOS.
        (?!                # Assert URL is not pre-linked.
          [?=&amp;+%\w.-]*     # Allow URL (query) remainder.
          (?:              # Group pre-linked alternatives.
            [\'"][^<>]*>   # Either inside a start tag,
          | </a>           # or inside <a> element text contents.
          )                # End recognized pre-linked alts.
        )                  # End negative lookahead assertion.
        [?=&amp;+%\w.-]*       # Consume any URL (query) remainder.
        ~ix', '<a href="http://www.youtube.com/watch?v=">YouTube link: </a>',
        $text);
    return $text;
}

En JavaScript, le code suivant effectue une opération similaire :

function linkifyYouTubeURLs(text) {
    var re = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&amp;+%\w.-]*(?:['"][^<>]*>|</a>))[?=&amp;+%\w.-]*/ig;
    return text.replace(re, '<a href="http://www.youtube.com/watch?v=">YouTube link: </a>');
}

  1. ws-
  2. w-
  3. <>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn