preg_match()

Paradox
Invité n'ayant pas de compte PHPfrance

27 mai 2009, 21:49

Bonjour,
j'aimerais filtrer des noms d'images stockés dans un tableau (généré par wordpress).
Par exemple :
[6] => cimg5120-1024×768.jpg
[7] => cimg5120-150×150.jpg
[8] => cimg5120-300×225.jpg
[9] => cimg5120.jpg
Je voudrais ne garder que le 9, c'est à dire virer tous ceux qui contiennent un "AAAxBBB". J'ai pensé utiliser un preg_match (avec un if(!preg_match())), mais mes essais se sont révélés infructueux... Je dois mal m'y prendre. Est-ce que quelqu'un aurait la bonté de me donner un preg_match qui irait ? Ca m'aiderait beaucoup parce que la je suis coincé...

Merci d'avance,

Paradox

ViPHP
ViPHP | 3300 Messages

27 mai 2009, 22:05

c'est pas dur mais on a pas l'habitude de faire le code, plutôt de le corriger, proposes quelquechoses et on t'indiquera ce que tu fais mal plutot que de le faire pour toi :)
Fait du php depuis que ca existe ou presque :)

Paradox
Invité n'ayant pas de compte PHPfrance

27 mai 2009, 23:09

Ah ben j'ai supprimé par erreur mon code, et en le refaisant du coup ça marche :) Comme quoi votre philosophie est la bonne, j'aurais appris quelque chose ;)

Voici le code en question, il est sûrement améliorable :
preg_match("/(.*)-([0-9]+)x([0-9]+)\.(.?)/i", $file)
Merci de ta réponse ;)

ViPHP
ViPHP | 3300 Messages

28 mai 2009, 02:08

les parenthèse ont pour but de capturer aussi c'est pas utile d'en mettre si tu ne veut pas réutiliser les données, aussi par expérience on gagne à durcir les expressions, donc si tu sais que ca commence par cimg et que c'est du jpg à tout les coups

cimg5120-1024×768.jpg

je ferais plutôt ça:
preg_match('`^cimg[0-9]+-[0-9]+x[0-9]+\.jpg$`');
^ signifie qui commence
$ signifie qui finit

ou mieux
!preg_match('`^cimg[0-9]+\.jpg$`');
Fait du php depuis que ca existe ou presque :)

Paradox
Invité n'ayant pas de compte PHPfrance

28 mai 2009, 07:22

Non justement ce qu'il y a avant la résolution est quelconque. J'ai pris l'exemple du cimg par hasard ;) Donc effectivement je peux me passer des parenthèses, merci du conseil :)

Eléphant du PHP | 170 Messages

28 mai 2009, 09:19

Bonjour,
j'aimerais filtrer des noms d'images stockés dans un tableau
preg_grep() est pratique dans ce cas.
<pre>
<?php
$img[6] = 'cimg5120-1024×768.jpg';
$img[7] = 'cimg5120-150×150.jpg';
$img[8] = 'cimg5120-300×225.jpg';
$img[9] = 'cimg5120.jpg';
$img[10] = 'abcd1234-120×120.jpg';
$img[11] = 'abcd1234.jpg';

//$img2 = preg_grep('/^[\w.]+$/', $img);
$img2 = preg_grep('/^[^×]+$/', $img);

print_r($img2);

?>
</pre>

Eléphant du PHP | 94 Messages

28 mai 2009, 10:41

Je dirais même plus :D , j'ajouterai PREG_GREP_INVERT comme option à la fin pour inverser les résultats,
et obtenir les fichiers à supprimer.
$img2 = preg_grep('/^[^×]+$/', $img, PREG_GREP_INVERT);
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]