analyser les vidéo de youtube id à l'aide de preg_match
J'essaie d'analyser la vidéo ID d'une URL de youtube à l'aide de preg_match. J'ai trouvé une expression régulière sur ce site qui semble fonctionner;
(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+
Comme le montre ce screen:
Mon PHP est comme suit, mais il ne fonctionne pas (donne de l'Inconnu modificateur '[' erreur)...
<?
$subject = "http://www.youtube.com/watch?v=z_AbfPXTKms&NR=1";
preg_match("(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+", $subject, $matches);
print "<pre>";
print_r($matches);
print "</pre>";
?>
Acclamations
- Dans votre RegexBuddy, vous avez Java comme la langue sélectionnée. Il y a aussi une Utilisation de l'onglet que vous pouvez cliquer sur qui va vous donner des échappées code à utiliser pour un certain nombre de situations différentes.
- Voir aussi: php regex trouver toutes les vidéo de youtube id dans la chaîne de caractères
- double possible de stackoverflow.com/questions/9973520/...
- Connexes: stackoverflow.com/questions/5830387/...
Vous devez vous connecter pour publier un commentaire.
Cette regex attrape les ID de tous les Url que j'ai pu trouver...
Il y a peut-être plus là, mais je n'arrivais pas à trouver de référence de n'importe où. Si vous venez à travers une cela ne correspond pas, vous pouvez laisser un commentaire avec l'URL, et je vais essayer de mettre à jour les regex pour correspondre à votre URL.
Voici un exemple de l'Url de cette expression correspond à: (il y a peut être plus de contenu après l'URL qui seront ignorés)
Il travaille également sur la youtube-nocookie.com URL avec les mêmes options ci-dessus.
Il sera aussi extraire l'ID de l'URL dans un embed code (iframe et les balises object)
$match[1]
était'9ofSV-ATEB0'
, qui EST l'id.[^/]+/.+/
) à l'arrière:%(?:youtube(?:-nocookie)?\.com/(?:(?:v|e(?:mbed)?)/|.*[?&]v=|[^/]+/.+/)|youtu\.be/)([^"&?/ ]{11})%i
. Pour d'autres variantes, il reste le même.[^"&?/ ]{11}
faire ce[a-z0-9-_]{11}
?[a-z0-9-_]
(qui devrait être[a-z0-9_-]
, btw) a permis de YouTube Id. Et parce que je n'ai pas de liste définitive de ce que ces personnages sont, j'ai plutôt cherché tout ce que je savais que cela ne pouvait pas être, à savoir[^"&?/ ]
. Je me rends compte que même la liste noire de caractères de la liste est incomplète, mais, fourni avec un valide URL de YouTube, il fonctionne.https://m.youtube.com/watch?v=
youtube.com
partie, et ne se soucie paswww.
oum.
.Mieux utiliser
parse_url
etparse_str
à analyser l'URL et la chaîne de requête:J'ai eu à traiter ce pour une classe PHP que j'ai écrit il y a quelques semaines et il a terminé avec une expression régulière qui correspond à tout type de cordes: Avec ou sans schéma d'URL, avec ou sans sous-domaine, youtube.com les chaînes d'URL, youtu.être des chaînes d'URL et de le traiter avec tous les types de paramètre de tri. Vous pouvez le vérifier sur GitHub ou tout simplement copier et coller le bloc de code ci-dessous:
Pour expliquer les regex, voici un déversé jusqu'à la version:
J'ai perfectionné la regex par la leader réponse. Il attrape aussi les ID de tous les Url, mais plus correctement.
Aussi, il gère correctement la mauvaise Id, dont plus de 11 caractères.
http://www.youtube.com/watch?v=0zM3nApSvMgDw3qlxF
Utilisation
Vous avez oublié d'échapper le caractère de barre oblique. Ce qui devrait faire la job:
#
Analyser paramètre de Démarrage pour le BBcode (https://developers.google.com/youtube/player_parameters#start)
exemple:
[yt]http://www.youtube.com/watch?v=G059ou-7wmo#t=58[/yt]
PHP regex:
remplacer:
Je n'ai vu personne directement l'adresse de l'erreur PHP, donc je vais essayer de l'expliquer.
La raison de "l'Inconnu modificateur '['" erreur, c'est que vous avez oublié d'emballer votre regex dans des délimiteurs. PHP prend juste le premier caractère comme un délimiteur, tant que c'est un non-alphanumériques, non-blanc de caractères ASCII. Donc, dans votre regex:
PHP pense que vous vouliez dire
(
comme un délimiteur d'ouverture. Puis, il trouve ce qu'il pense de votre clôture délimiteur, la prochaine)
et suppose ce qui suit sont des modificateurs de modèle. Toutefois, il constate que votre premier modèle de modificateur, le caractère juste après le premier)
, est[
.[
est évidemment pas un motif valable modificateur, qui est pourquoi vous obtenez le message d'erreur que vous faites.La solution est tout simplement de l'enveloppe de votre regex dans les délimiteurs et assurez-vous que les délimiteurs dans la regex que vous souhaitez faire correspondre littéralement sommes échappés. J'aime utiliser
~
comme délimiteurs, b/c vous avez rarement besoin de correspondre à un littéral~
dans une regex.utilisez code ci-dessous
http://stackoverflow.com/questions/2164040/grab-the-youtube-video-
id-avec-jquery-match"cela a fonctionné pour moi.