|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Je souhaite traiter des chemins de fichiers.. j'ai trouvé un comportement qui me semble anormal dès qu'il y a certains chiffres après. Qui peut m'expliquer ou se trouve mon erreur dans mon tout petit motif de détection d'antislash ('[\\\]') ?
Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() Inscription : septembre 2006 Messages : 685 ![]() |
Je suppose que c'est parce qu'un antislash suivit d'un nombre désigne une référence arrière.
En utilisant preg_quote() sur la chaine à analyser le problème est règlé. |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Merci Xunil, ça marche... presque :
si j'essaye avec une chaine sans le point : Code :
$str_chaine_avec_antislash="abcde\2fghijphp"; // renvoi "not found" ![]() ... en + continuant mon code, j'ai trouvé des effets bizzares (pour la première fois j'ai un code qui me nargue littéralement en m'envoyant un smiley |
|
|
00
|
|
|
#4 | |||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Maintenant je veux remplacer l'antislash par un point... ça devrait être facile...
Code :
Résultat pour le code au-dessus :Citation:
Résumé de mes galères : preg_match trouve bien mon antislash.. mais :
|
|||
|
|
00
|
|
|
#5 | |||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
En fait, il semble que :
preg_match('[\\\]',preg_quote($str_to_detect)); ne soit pas équivalent en terme de détection que preg_replace('[\\\]',......,preg_quote($str_to_detect)); puisque ce dernier parvient pas a remplacer l'antislash détecté pourtant par le précedent preg_match... SAUF que si j'active les options de preg_replace pour lire le nombre de remplacement : Code :
Citation:
Bug de preg_replace ??? |
|||
|
|
00
|
|
|
#6 | |||||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
En fait Xinul, je pense que preg_quote n'est pas la solution, car si je fait le test suivant (sans preg_quote) :
Code :
Citation:
Code :
![]() Le premier qui me dit que les regex font gagner du temps...:
|
|||||
|
|
00
|
|
|
#7 | ||
|
Membre expérimenté
![]() Inscription : septembre 2006 Messages : 685 ![]() |
En fait, non preg_quote() n'est pas utile
Tes résultats sont faussés car tes chaines sont entre guillemets, donc évaluées par php. Code :
Mais si c'est pour détecter qu'un \ est présent dans ta chaine, strpos() est amplement suffisant. |
||
|
|
00
|
|
|
#8 | ||||
|
Membre régulier
![]() Inscription : mai 2007 Messages : 180 ![]() |
Très interessant.
Merci beaucoup Xunil, j'avais pas capté l'erreur. Voila donc maintenant un bon bout de code bien bétonné avec le bon controle d'erreur "qui va bien", du bon code robuste comme le faisait nos grand-parents dans l'ancien temps : Code :
Code :
![]() ![]()
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com