Prendiamo questi URL come esempio:modello di RegEx per ottenere l'ID video di YouTube da qualsiasi URL di YouTube
- http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
- http://www.youtube.com/watch?v=8GqqjVXhfMU
Questa funzione PHP non otterrà correttamente l'ID in caso 1, ma nel caso 2. Il caso 1 è molto comune, dove QUALSIASI può venire dietro l'ID YouTube.
/**
* 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;
}
Quello che sto pensando è che ci deve essere un modo in cui posso solo cercare il "v =", non importa dove si trova l'URL, e prendere i caratteri dopo. In questo modo, non sarà necessaria alcuna RegEx complessa. È fuori base? Qualche idea per i punti di partenza?
Penso che il problema principale con questo modello sia solo il $ alla fine del modello, che ancorava il modello alla fine della stringa in fase di test. Questo è il motivo per cui il caso 1 non corrisponde, perché non termina con l'ID. – Bendoh