Utiliser un tableau dans une regex

WRInaute passionné
Hello,

Je tente de créer une regex, mais je butte sur la dernière étape... Je souhaite transformer une date en français contenue dans un texte (ex: Nous sommes le 12 février 2003.") en cette même date, toujours dans le texte, mais avec un lien vers une sorte de calendrier, qui doit donc avoir le n° du mois ( de 01 à 12) et de l'année (4 chiffres) dans l'URL.

Problème: je n'arrive pas à utiliser un tableau associatif dans ma regex... Je dois pourtant le faire pour associer au mois en français le "chiffre" correspondant pour l'url (ex: mai="05").

Voici ma regex, précédé du tableau associatif en question (abrégé) :

Code:
$tMois = array("janvier" => "01", "février" => "02", "mars" => "03", "avril" => "04", "mai" => "05");

$chaine = eregi_replace("([0-9]+) (janvier|février|mars|avril|mai) ([0-9]+)", "<A HREF=\"http://www.site.com/chrono_".$tMois['\\2']."-\\3.php\" TARGET=\"_blank\">\\1 \\2 \\3</A>",$chaine);

Le problème se situe au niveau de l'appel au tableau dans ma regex: $tMois['\\2']

Le code me retourne l'expression voulue, hormis le mois qui n'apparait pas dans l'URL.

J'obtiens: -http://www.site.com/chrono_-2004.php
Au lieu de : -http://www.site.com/chrono_02-2004.php

Je ne sais pas quelle syntaxe utiliser... Quelqu'un peut-il m'aider ?

Merci d'avance,
aK.
 
WRInaute passionné
Déjà un petit détail mais qui a son importance : privilégie les expressions régulières compatibles Perl (PCRE, les fonctions preg_*), elles sont plus rapides.

Ces regex là permettent de définir des options pour la recherche et/ou le remplacement, notamment l'option 'e', qui va faire que ton 2ème argument sera considéré comme du code et donc interprété.

Exemple :

Code:
<?php
function myDate($jj, $mm, $aaaa) {
	$tMois = array('janvier' => '01', 'février' => '02', 'mars' => '03', 'avril' => '04', 'mai' => '05');
	return '<a href="http://www.site.com/chrono_'.$tMois[$mm].'-'.$aaaa.'.php">'.$jj.' '.$mm.' '.$aaaa.'</a>';
}
$chaine = 'Nous sommes le 20 mars 2004, déjà !';
echo preg_replace('/([0-9]+) (janvier|février|mars|avril|mai) ([0-9]+)/ie', 'myDate($1, $2, $3)', $chaine);
?>

Fred
 
WRInaute passionné
Mille Mercis !!!

Je pensais que personne n'allait pouvoir me répondre... merci beaucoup !

aK.
 
Discussions similaires
Haut