Preg_match match mais ne capture pas - PHP - Programmation
Marsh Posté le 01-04-2020 à 17:43:52
Désolé, c'est déjà réglé, j'y ai vu plus clair en écrivant mon message, faut utiliser le pattern :
Code :
|
Marsh Posté le 02-04-2020 à 22:06:30
Désolé mais ton code me semble bien compliqué
Avec le bout de code suivant, ça retourne tous les fichiers avec tes extensions voulues :
|
C'est mieux pour toi ?
Marsh Posté le 03-04-2020 à 00:19:07
Euh je ne vois pas ce qu'il a de compliqué, il liste les fichiers d'un dossier puis élimine à l'aide d'une expression régulière ceux qui ne répondent pas au critère des extensions recherchées. C'est juste une boucle avec if dedans.
L'avantage de mon code, ce qui quitte à utiliser une expression régulière, autant aller jusqu'au bout en utilisant son résultat.
Ce qui peut paraître complexe c'est la création du regex mais c'est parce que je veux partir d'un tableau.
Au final, ton code est plus "court" (tu écris moins de lignes mais ne fait pas moins d'opérations) mais est probablement moins performant (tu boucles deux fois sur ta liste de fichiers dont un array_map qui applique deux fonctions) et tu ne gagnes pas vraiment en lisibilité.
Marsh Posté le 03-04-2020 à 15:24:45
Il fait exactement la même chose :
Code :
|
Ce n'est pas de la magie, ça fait juste répéter un preg_match sur chaque itération du tableau passé en paramètre.
Comme je le disais, j'utilise une boucle de taille n lorsque lui utilise deux boucles de taille n, le calcul est vite fait !
On est d'accord que le regex en dur est plus clair mais ne répond pas à la problématique (que j'ai partiellement exposé) qui fait que le regex n'est pas connu à l'avance.
EDIT : j'ai simplifié la construction du regex (plus de map) :
Code :
|
Marsh Posté le 03-04-2020 à 23:13:41
Plus ou moins, en fait il fait une boucle de taille n puis une boucle plus courte (plus courte des fichiers éliminés). Là où encore une fois je ne fais qu'une boucle de taille n.
Et même côté mémoire, il instancie un tableau de la taille du nombre de fichiers (comme moi avec scandir), puis instancie un second tableau avec le preg_grep, là où je reste avec un seul tableau.
Alors même si on n'est pas dans le besoin de l'extrême performance, je suis sur 500-1000 fichiers, c'est loin d'être critique mais pas non plus suffisamment anecdotique pour choisir une légère meilleure lisibilité ?
Marsh Posté le 03-04-2020 à 23:34:31
Par contre je viens de me rendre compte qu'il y avait mésentente, il me retourne la liste des fichiers sans leur extension, moi je veux garder l'extension du fichier, je veux juste éliminer ceux qui n'ont pas l'extension voulue.
Du coup son code se simplifie à :
Code :
|
Et là je dis oui ! Même si après quelques tests de performance, la différence avec mon code est minime, on est plus rapide de 0,05 - 0,1 ms maintenant.
Marsh Posté le 01-04-2020 à 17:41:41
Bonjour,
Je liste des images dans un dossier, cela fonctionne très bien sauf pour une image en .png contrairement à toutes les autres qui sont en .jpg.
Donc je scanne tous les fichiers, puis à partir de leur nom j'applique une expression régulière qui élimine tout ce qui n'a pas la bonne extension, ensuite je récupère le nom de l'image sans son extension :
J'ai inséré un test pour le fichier en question, $matches[0] me renvoie bien ".png" mais $matches[1] me renvoie NULL et $value vaut "256426.png".
Je ne capte pas, il détecte bien que dans le nom du fichier il y a l'extension mais ne veut pas capturer.
Le $pattern littéral obtenu est :
---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.