2009-10-03 5 views
0

est ici le sujet:Comment écrire regex pour trouver un répertoire dans une URL?

http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov 

Ce que je besoin de l'aide regex est que le bit avant le dernier/(y compris cette dernière/trop) La chaîne 937IPiztQG peut changer; il contiendra a-z A-Z 0-9 - _

Voici ce que j'ai essayé:

$code = strstr($url, '/http:\/\/www\.mysite\.com\/files\/get\/([A-Za-z0-9]+)./'); 

EDIT:-je utiliser regex parce que je ne sais pas vraiment l'URL. J'ai la chaîne comme ceci ...

<a href="http://www.mysite.com/files/get/1B-MenlPW0/my-file.doc">a song</a> 
<a href="http://www.mysite.com/files/get/1ZeR5KEo9x/my-song.mp3">more text</a> 
<a href="http://www.mysite.com/files/get/8IySvO5gMD/my-video.avi">oh and here goes some more blah blah</a> 

J'ai besoin de lui pour lire cette chaîne et couper la partie de nom de fichier des URLs.

+0

jamais l'esprit que je trouve la solution – Imran

Répondre

4

Vous n'avez vraiment pas besoin d'une regexp ici. Voici une solution simple:

echo basename(dirname('http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov')); 
// echoes "937IPiztQG" 

Aussi, je voudrais citer Jamie Zawinski:

« Certaines personnes, lorsqu'ils sont confrontés à un problème, pensez « Je sais, je vais utiliser régulièrement expressions.' Maintenant, ils ont deux problèmes."

+2

+1 pour une bonne réponse, -1 pour la citation JZ surchargée. J'en ai tellement marre d'entendre cette citation. –

0
/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/ 

Que diriez-vous de quelque chose comme ceci? Ce qui devrait capturer tout ce qui n'est pas un /, 1 fois ou plus avant un /.

0

La fonction strstr() n'utilise pas d'expression régulière pour l'un de ses arguments c'est la mauvaise fonction pour le remplacement d'expressions régulières.

Pensez-vous à preg_replace()? Mais une fonction comme basename() serait plus appropriée.

+0

Im ne cherche pas à le remplacer par quoi que ce soit, je dois obtenir cette URL en utilisant le code $ – Imran

+0

Ok, mais mon point est que strstr doesn Ne pas comprendre regexes, preg_replace (ou preg_match) * do * mais simplement extraire le nom du fichier ou du dossier est un travail pour une autre fonction. Peut-être aurais-je dû suggérer dirname() – pavium

0

Le greediness de regexp assurera cela fonctionne bien ^.*/

2

Cela semble beaucoup trop simple à utiliser regex. Utilisez quelque chose de similaire à strrpos pour rechercher la dernière occurrence du caractère '/', puis utilisez substr pour couper la chaîne.

0

Essayez cette

$ok=preg_match('#mysite\.com/files/get/([^/]*)#i',$url,$m); 
if($ok) $code=$m[1]; 

Ensuite, donner une bonne lecture à ces pages

Remarque

  • l'utilisation de « # » comme séparateur pour éviter d'être pris au piège dans échapper un trop grand nombre «/»
  • le « i » drapeau de jumelage insensible (permettant des orthographes plus libérales du nom de domaine MySite.com)
  • le tableau de m $ des résultats capturés
+0

Cela obtient seulement trouve des correspondances sur les liens que je veux qu'ils soient. J'ai besoin d'un script qui change réellement ces liens à l'intérieur de la chaîne pour que je désire – Imran

+0

donc quelque chose comme $ url = preg_replace ('#http: // www \ .mysite \ .com/files/get/([^ /] *) [^ "] * # i ',' smtg \ 1 smtg ', $ url); – ZJR

Questions connexes