Utiliser un tableau dans une regex

  • Auteur de la discussion Auteur de la discussion Haq
  • Date de début Date de début
H
Haq
Guest
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
 
H
Haq
Guest
Mille Mercis !!!

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

aK.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut