[Résolu] Problème Expressions régulières


Dharius
WRInaute impliqué
WRInaute impliqué
 
Messages: 829
Inscription: 6 Avr 2005

[Résolu] Problème Expressions régulières

Message le Lun Oct 29, 2007 20:37

Bonjour,

Une fois n'est pas coutume, j'ai un problème d'expressions régulières... mais je fais des progrès :D

Voilà, j'ai un texte du genre :

$texte = "tarif1 :US$6; tarif2 :US$12; tarif3 : US$2";

je voudrais replacer "US$X" par "valeur=X"...

J'utilise l'expression suivante mais elle ne remplace que la première occurence :

Code: Tout sélectionner
eregi_replace ("US(((.*){1,5}))", "valeur=\\1",$texte);


Qu'elqu'un s'y connait-il assez pour m'aider ?
Dernière édition par Dharius le Mar Oct 30, 2007 18:05, édité 3 fois.


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Re: Problème Expressions régulières

Message le Lun Oct 29, 2007 21:00

Code: Tout sélectionner
preg_replace('#US\$([0-9])#U', 'valeur=$1', $texte);


ZelkiN
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 492
Inscription: 27 Juil 2007

Message le Lun Oct 29, 2007 21:28

+1 j'aurai mis la meme que medium69, a tester


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Lun Oct 29, 2007 21:30

ZelkiN a écrit:+1 j'aurai mis la meme que medium69, a tester


Elle fonctionne :wink:

Preg est beaucoup plus rapide que ereg de surcroît


Dharius
WRInaute impliqué
WRInaute impliqué
 
Messages: 829
Inscription: 6 Avr 2005

Message le Mar Oct 30, 2007 14:38

MErci, c'est parfait, ca marche :)

THX


Dharius
WRInaute impliqué
WRInaute impliqué
 
Messages: 829
Inscription: 6 Avr 2005

Message le Mar Oct 30, 2007 16:12

Heu... en fait je complique un peu la chose...

je veux multiplier cette valauer par 3.14 par exemple genre "'valeur=$1*3.14" -> mais ça ne marche pas bien entendu!

Comment faire ?


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Mar Oct 30, 2007 17:14

Dharius a écrit:Heu... en fait je complique un peu la chose...

je veux multiplier cette valauer par 3.14 par exemple genre "'valeur=$1*3.14" -> mais ça ne marche pas bien entendu!

Comment faire ?


C'est pourtant simple :mrgreen: ...

Il faut que tu passe passe une fonction pour cela...

dans ce cas cela devient :

Dans la première on ne cherchait qu'une séquence US$ suivi d'au moins un chiffre.

Dans le nouveau cas, non seulement, nous voulons récupérer l'intergalité du nombre et le modifier...

On cherche le masque US$ suivi d'une série de chiffre de 1 à l'infini, suivi de n'importe quel caractère qui n'est pas un chiffre ou alors une fin de texte.

Code: Tout sélectionner
function MaSuperFonction($value) {

$var = 'valeur='.$value[1]*3.14.$value[2];

return $var
}

preg_replace_callback('#US\$([0-9]+)([^0-9]|$)#U', 'MaSuperFonction', $texte);


J'ai galéré longtemps avec les regex, et maintenant c'est aussi limpide que de l'eau claire...

Je devrais peut-être me mettre au chinois un de ces quatre :wink:


Dharius
WRInaute impliqué
WRInaute impliqué
 
Messages: 829
Inscription: 6 Avr 2005

Message le Mar Oct 30, 2007 17:28

Lol, j'allucine, ça marche et ça a l'air si facile pour toi : MERCI !!!

En hommage pour toi, la foncion portera toujours le même nom "MaSuperFonction" hihi...

Wai c'est comme tout, à un moment, tu as le déclic et tout te parait plus simple....

Merci ;)


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Mar Oct 30, 2007 17:36

Dharius a écrit:Lol, j'allucine, ça marche et ça a l'air si facile pour toi :


Tu sais... j'ai galéré durant des heures et des heures, car c'est vraiment du chinois.

Mais une fois que tu as réussi à comprendre toutes les facettes, c'est un vrai régal.

Dharius a écrit:En hommage pour toi, la foncion portera toujours le même nom "MaSuperFonction" hihi...


euh...

Gaffe à toi, j'ai dépose le nom à l'Inpi aujourd'hui :lol:


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Mar Oct 30, 2007 17:39

je viens de voir que tu utilisais eregi_replace...

Si US peut aussi être us, il faut que tu ajoutes « i » à la suite de « U » dans preg_replace_callback


Dharius
WRInaute impliqué
WRInaute impliqué
 
Messages: 829
Inscription: 6 Avr 2005

Message le Mar Oct 30, 2007 18:04

merci ! :)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités