Utiliser un tableau dans une regex

  • Auteur de la discussion Auteur de la discussion Haq
  • Date de début Date de début
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.
 
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
 
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