Remplacement conditionnel via une regexp
Bonjour à tous,
Je cherche à traiter un fichier structuré ainsi :
Citation:
A blabfdsdflabla... cvsfsgtgtfgf fdsfdsfd € 452 gdsfgf € 123
_ blafdsfsdfblabla... cvsfsgttgfgf fdsfdsfd gdsfgf £ 123
B blablasfsffsdfbla... cvsfgtrgtrhfgf $ 45 fdgtgdsfd $ 335 gdsfgf $ 123
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
A blablabfsfsdla... cvsfsfgtrsdhfgf $ 654 fdsfdsfd gdsfgf $ 123
_ blablabfdsfsdla... cfdsdgvsfsfhfgf € 100 fdsfdsfd gdsfgf € 123
A blablafsdfsbla... cvsffdgdfggsfhfgf £ 44 fdsfdgfdgdffsfssfsf fsdfd gdsfgf £ 123
Toutes les lignes commencent soit par une lettre, soit par un _
Dans le cas où les lignes ne commencent pas par _, je veux coloriser tous les prix qui se trouvent sur la ligne. Les prix sont systématiquement précédés de $ £ ou € suivi et précédé d'un blanc
Pour les lignes qui commencent par un _, je ne veux rien faire du tout car ces items sont épuisés
J'ai écrit ceci en php :
Code:
1 2 3 4 5 6 7 8 9
| function maj_prix($capture)
{
if ($capture[1] != "_") $maj = "<span class='prix'>".$capture[4]."</span>";
else $maj = $capture[4];
$txt = $capture[1].$capture[2].$capture[3].$maj;
return $txt;
}
$texte = preg_replace_callback('#^(.)(.*?)( [$£] )([0-9,]+)#m', "maj_prix", $texte); |
Cela ne fonctionne pas trop mal, cela ne touche pas aux lignes avec des _.
Le seul problème c'est que cela ne transforme que le premier prix de la ligne dans le cas où je mets le non-gourmant (.*?)
Citation:
A blabfdsdflabla... cvsfsgtgtfgf fdsfdsfd € <span class='prix'>452</span> gdsfgf € 123
_ blafdsfsdfblabla... cvsfsgttgfgf fdsfdsfd gdsfgf £ 123
B blablasfsffsdfbla... cvsfgtrgtrhfgf $ <span class='prix'>45</span> fdgtgdsfd $ 335 gdsfgf $ 123
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
A blablabfsfsdla... cvsfsfgtrsdhfgf $ <span class='prix'>654</span> fdsfdsfd gdsfgf $ 123
_ blablabfdsfsdla... cfdsdgvsfsfhfgf € 100 fdsfdsfd gdsfgf € 123
A blablafsdfsbla... cvsffdgdfggsfhfgf £ <span class='prix'>44</span> fdsfdgfdgdffsfssfsf fsdfd gdsfgf £ 123
Et en remplaçant le non-gourmand (.*?) par un gourmand (.+), cela ne remplace que la dernière occurence, donc ce n'est pas suffisant non plus :
Citation:
A blabfdsdflabla... cvsfsgtgtfgf fdsfdsfd € 452 gdsfgf € <span class='prix'>123</span>
_ blafdsfsdfblabla... cvsfsgttgfgf fdsfdsfd gdsfgf £ 123
B blablasfsffsdfbla... cvsfgtrgtrhfgf $ 45 fdgtgdsfd $ 335 gdsfgf $ <span class='prix'>123</span>
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
_ blabfsdffsdsfsfdlabla... cvsfsfhfgf rererzerzerzdsfdsfd € 44 gdsfgf € 123
A blablabfsfsdla... cvsfsfgtrsdhfgf $ 654 fdsfdsfd gdsfgf $ <span class='prix'>123</span>
_ blablabfdsfsdla... cfdsdgvsfsfhfgf € 100 fdsfdsfd gdsfgf € 123
A blablafsdfsbla... cvsffdgdfggsfhfgf £ 44 fdsfdgfdgdffsfssfsf fsdfd gdsfgf £ <span class='prix'>123</span>
Je dois passer à côté de quelque chose mais je ne parviens pas à colorer tous les prix de mes lignes (ne commençant pas par _) mais uniquement soit le premier, soit le dernier.
Pouvez-vous m'aider à colorer tous mes prix des lignes ne commençant pas par _ si possible sans faire de boucle ?
Merci d'avance.