Page 1 sur 1

probléme avec les regex :(

Posté : 09 oct. 2008, 20:04
par mike001
Bonjour,

Voilà j'ai fait là REGEX suivante :
$lang_c = preg_replace('#Disp "(([a-zA-Z]+)(,)([0-9]+))"#isU', 'printf("$1 %d, $3");', $lang_c);
Ce qui est censé remplacé dans la variable $lang_c "Disp "test",1" PAR "printf("test %d", 1)"

Mais elle ne fonctionne pas ...

Merci d'avance pour votre aide

EDIT : merci a cyrano :
$lang_c = preg_replace('#Disp "(?:([a-zA-Z]+)"(?:,)([a-zA-Z0-9]+))#is', 'printf("$1 %d", $2);', $lang_c);

Posté : 09 oct. 2008, 20:42
par Cyrano
Ça bafouille au niveau des guillemets ... essaye ceci :

Code : Tout sélectionner

#Disp "(?:([a-zA-Z]+)"(?:,)([0-9]+))#is
Et pour le remplacement :

Code : Tout sélectionner

'printf("$1 %d", $2);'
Sortie :

Code : Tout sélectionner

printf("test %d", 1);
Tu noteras dans l'expression régulière l'ajout d'un "?:" après la première et la troisième parenthèse ouvrante : si tu ne fais pas ça, les pointeurs de remplacement ne sont pas bon et il faudrait alors les remplacer par 2 et 4. Et on vire le paramètre U... puisque tu as besoin de capturer certaines parenthèses : avec le "?:", on recherche donc la 1 et la 2 qui ne sont pas affectées.

Posté : 09 oct. 2008, 20:45
par mike001
merci j'ai réussi juste avant que tu me réponde mais merci beaucoup pour ton aide et continue a nous aider ;)

Posté : 09 oct. 2008, 21:12
par Cyrano
Pour mettre au point tes regex, je te suggère un petit outil libre dont je me sers depuis des années : [url=file:///C:/Program%20Files/The%20Regex%20Coach/doc/index.html]RegexCoach[/url]
Les seuls détails importants pour s'en servir :
- Pour l'expression elle-même, on ne met ni les délimiteurs ni les paramètres : pour ces derniers, tu as des cases à cocher;
- Pour le remplacement (onglet "replace" en bas, on utilise des "\" au lieu de "$" pour voir le résultat obtenu.

Et sinon, tu as toujours aussi le site d'un vieux routier en la matière : http://www.lumadis.be/regex/test_regex.php?lang=fr