RegEx Muster, um die YouTube video-ID aus jedem YouTube-URL

Lassen Sie uns nehmen Sie diese URLs als Beispiel:

  1. http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
  2. http://www.youtube.com/watch?v=8GqqjVXhfMU

Diese PHP-Funktion NICHT richtig um die ID in Fall 1, nicht aber Fall 2. Fall 1 ist sehr verbreitet, wo NICHTS kommen kann, hinter die YouTube-ID.

/**
 * get YouTube video ID from URL
 *
 * @param string $url
 * @return string YouTube video id or FALSE if none found. 
 */
function youtube_id_from_url($url) {
    $pattern = 
        '%^# Match any YouTube URL
        (?:https?://)?  # Optional scheme. Either http or https
        (?:www\.)?      # Optional www subdomain
        (?:             # Group host alternatives
          youtu\.be/   # Either youtu.be,
        | youtube\.com  # or youtube.com
          (?:           # Group path alternatives
            /embed/    # Either /embed/
          | /v/        # or /v/
          | /watch\?v=  # or /watch\?v=
          )             # End path alternatives.
        )               # End host alternatives.
        ([\w-]{10,12})  # Allow 10-12 for 11 char YouTube id.
        $%x'
        ;
    $result = preg_match($pattern, $url, $matches);
    if (false !== $result) {
        return $matches[1];
    }
    return false;
}

Was ich mir denke ist, dass es einen Weg geben muss, wo ich kann, schau einfach nach dem "v=", egal wo es liegt in der URL, und nehmen Sie die Zeichen nach, die. In dieser Weise, werden keine komplexen RegEx benötigt werden. Ist dieser off base? Irgendwelche Ideen für Ansatzpunkte?

  • Ich denke, das Hauptproblem mit diesem Muster ist nur das $ am Ende des Musters, die Anker das Muster am Ende des Strings geprüft. Dies ist der Grund, warum Fall 1 nicht entsprechen, weil es noch nicht zu Ende mit der ID.
InformationsquelleAutor Shackrock | 2012-03-07
Schreibe einen Kommentar