2010-06-10 4 views
1

Je cette regex pour obtenir l'ID vidéo YouTube:preg_match() modificateur inconnu '[' help

(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+ 

Je reçois de là: Regex to parse youtube yid

Le problème est que je reçois avertissement preg_match() Unknown modifier '['.

Je sais que je dois entourer les délimiteurs regex mais je n'ai aucune idée de comment faire cela.

Une aide?

+3

Ajouter le delimiter slash au sein de votre regex –

+2

Avez-vous délimitez la regex dans votre code? c'est-à-dire '/ expression /' – Amber

Répondre

5

les opérations suivantes:

<?php 
    $str = "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I"; 
    $pattern = '#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#'; 
    preg_match($pattern, $str, $matches); 
    print_r($matches); 
?> 

Remarque, j'utilise # comme délimiteur ici simplement parce que l'expression régulière ci-dessus contient des barres obliques et les échapper rend plus difficile à lire l'expression. Cela le nettoie de quelques pixels seulement.

+0

J'ai besoin du PREG_OFFSET_CAPTURE, 3 ??? – Jonathan

+0

Non, j'ai modifié le code pour refléter ce que vous cherchez. – randombits

0

Mon RegEx suivait:

[A-Za-z] {3} \ d {4} [A-Za-z] {4}

Et je l'ai mis comme suit:

if (!preg_match("[A-Za-z]{3}\d{4}[A-Za-z]{4}", trim($search_query))) { return false; } 

Mais il m'a redonné l'avertissement suivant:

A PHP Erreur a été rencontré

Gravité: Message d'avertissement: preg_match(): modificateur inconnu '{' Nom du fichier: modèles/room_reservation_model.php Numéro de ligne: 61

Je remarquai alors dans une partie de ce qui suit de la link qu'ils ont mis le modèle de RegExdans les deux «/» comme suit:

$name = test_input($_POST["name"]); 
if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
    $nameErr = "Only letters and white space allowed"; 
} 

Je renoncez ces deux «/» devant un nd après mon schéma de RgeEx comme suit et le problème résolu:

if (!preg_match("/[A-Za-z]{3}\d{4}[A-Za-z]{4}/", trim($search_query))) { return false; }