Parser une chaine de caractere de longueur variable

Parser une chaine de caractere de longueur variable - PHP - Programmation

Marsh Posté le 19-03-2010 à 17:18:47    

Bonjour,
 
Y a t'il un moyen "élégant" de parser une chaine de caractère de type "aaaaaaaa-123456-bbbbbbbb" pour en retirer le code 123456?
Où la chaine aaaaaaa est de longueur variable et la chaine bbbbbbbb aussi.
 
Bien sur c'est un exemple en vrai ça ressemble plutot à:
4-panasonic_lumix_dmc_tz7_10_1_mpixels_noir_-86866-numerique-appareil_photo_numerique_compact
 
Visiblement le code (qui est un id produit en fait) varie de 4 à 6 chiffres.
 
Merci de votre aide!

Reply

Marsh Posté le 19-03-2010 à 17:18:47   

Reply

Marsh Posté le 19-03-2010 à 18:22:20    

regarde du côté des expressions regulières  et principalement de preg_replace


Message édité par flo850 le 19-03-2010 à 18:22:35

---------------

Reply

Marsh Posté le 22-03-2010 à 08:18:21    

preg_replace va me permettre de sortir l'id seulement s'il est connu non?
Moi je cherche justement à extraire ce numéro quelle que soit sa valeur, c'est possible avec cette fonction? Avec un masque peut être... :??:  
 
Peut être que le fait que l'id soit toujours encadré de "-" peut aider...

Reply

Marsh Posté le 22-03-2010 à 08:37:44    

si il a une structur connu

 

donc plein de bordel-(ref)-pleind e bordel , ça se traite bien en expression regulières
preg_match si c'est pour extraire l'id
preg_replace pour le remplacer


Message édité par flo850 le 22-03-2010 à 08:37:51

---------------

Reply

Marsh Posté le 22-03-2010 à 09:16:28    

ok... d'accord c'est donc là qu'interviennent ces fameux regex...
Je pensais y échapper, mais bon je vais me documenter un peu!
 
EDIT: Bon voilà c'est ma première fois, alors je ne suis pas sur de moi, mais voilà mon expression régulière pour les conditions citées ci-dessus:
 

Code :
  1. preg_match("-[0-9]{4,}-", "4-panasonic_lumix_dmc_tz7_10_1_mpixels_noir_-86866-numerique-appareil_photo_numerique_compact ", $matches)


 
Va retourner la valeur 86866 dans la variable $matches?


Message édité par garath_ le 22-03-2010 à 10:08:13
Reply

Marsh Posté le 22-03-2010 à 13:56:38    

Oui.  
Attention que $matches est un tableau, donc 86866 sera contenu dans $matches[0].
 
En général on utilise le / comme délimiteur d'expression, et pas le - comme tu l'as fait.
 
Dans ton cas précis, voici l'expression que j'utiliserais:

Code :
  1. preg_match("/-([0-9]{4,})-/","4-panasonic_lumix_dmc_tz7_10_1_mpixels_noir_-86866-numerique-appareil_photo_numerique_compact ",$matches);


 
Pourquoi? Parce que comme cela tu t'assures que tu détectes 86866 uniquement s'il est entouré de "-".
 
Dans ce cas, $matches sera:
$matches[0] => -86866-
$matches[1] => 86866   (délimité par les parenthèses)
 
Ce sera donc $matches[1] qu'il faudra utiliser pour trouver ton Id.

Reply

Marsh Posté le 22-03-2010 à 14:04:39    

Oui j'avais fait attention à ça mais le forum m'a enlevé les slash...
Mais tu as répondu à ma 2eme question pour extraire uniquement l'id!
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed