Regex, besoin d'aide [Résolu]

Signaler
Messages postés
39
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 mars 2009
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour, je débute en php et j'ai un peux de mal avec les regex, pourriez vous me dire ce qui ne va pas :
voici ce que j'ai fait :
<?php
$src "var fullscreenUrl '/watch_fullscreen?video_id=I4u3449L5VI&l=49&t=OEgsToPDskJ15vTYghbY4cV6svG65ni9&sk=Qm2dSw1ODsdMOA0rq4wsjQC&fs=1&title=Test de regex';";

preg_replace_callback("watch_fullscreen?video_id=(.+?)&.*&t=(.+?)&.*&title=(.+?);`i", 'test' , $src);
?>
la régex est sensé selectionner l'id de la video ( dans l'exemple : I4u3449L5VI ), la variable t ( ici : OEgsToPDskJ15vTYghbY4cV6svG65ni9), et la variable title (ici : Test de regex) mais malheureusement ca ne marche pas ^^

Merci d'avance :D
taxidogkiller

3 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Que fait ta fonction "test" ?

Sinon, le masque (.+?) est mal écrit : le + indique la présence d'au moins 1 caractère. Le ? de 0 ou 1 caractère. Donc, il y a conflit. De plus, ce masque est trop permissif : tu sais pertinemment que tu n'as que des chiffres ou des lettres (maj/min), et rien d'autre : limite toi à ça avec ([a-zA-Z0-9]+).

Ton expression régulière n'a pas de délimiteur de début. Tu as bien spécifié celui de fin ( ` ) mais pas celui de début.

Quant au titre, je doute qu'il y ait des espaces : l'url doit avoir été encodée avec url_encode() (ce qui encode les caractères spéciaux, dont les espace). Il faudra décoder avec url_decode().



$res = preg_match('`((?<=video_id=)[a-zA-Z0-9]+)(?:.*)((?<=t=)[a-zA-Z0-9]+)(?:.*)((?<=title=)[\w\s]+)`', $src, $matches);
if ($res) {
list($id, $t, $title) = $matches;
}
Messages postés
39
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 mars 2009

Merci beaucoup ! ca marche nikel, en plus je m'était trompé de fonction il falait que j'utilise preg_match comme tu l'a écrit !
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

pourquoi passer par une expression régulière pour faire ça alors qu'il y a des fonctions dédiées forcément plus rapides ?
<?php$src "var fullscreenUrl '/watch_fullscreen?video_id=I4u3449L5VI&l=49&t=OEgsToPDskJ15vTYghbY4cV6svG65ni9&sk=Qm2dSw1ODsdMOA0rq4wsjQC&fs=1&title=Test de regex';";
$aParsed = parse_url($src);
parse_str($aParsed['query'], $aQuery);
echo $aQuery['video_id'];
?>