Salut à tous,
Je me casse la tête sur un problème tout bête, à vrai dire je n'avais même pas imaginé que c'en serait un...
J'ai des liens codés par des chiffres, du type :
Je voudrais ajouter un zéro à la fin de tous ces liens, dans une base de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a href="100">link</a>
J'ai naturellement pensé à une regexp en séparant les liens en deux motifs entre parenthèses et en insérant un "0" entre les deux. Voici ce que ça donne :
Mais voilà : ça ne marche pas (sinon je ne serais pas là ), parce que le moteur recherche en réalité le motif 10, puis le motif 2... Or le motif 10 n'existe pas, donc il n'affiche que le motif 2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $link = '<a href="100">link</a>'; $newlink = preg_replace('/(<a href="\d+)("[^>]*>[^<]+<\/a>)/', "$1"."0"."$2", $link); print($newlink); // Affiche : ">link</a>
La fonction en elle-même n'est pas en cause, puisque si je remplace le "0" par "a" ou "foo", j'obtiens le résultat voulu.
Mais dès que j'essaie de concaténer un chiffre, ça fait planter la regexp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $link = '<a href="100">link</a>'; $newlink = preg_replace('/(<a href="\d+)("[^>]*>[^<]+<\/a>)/', "$1"."foo"."$2", $link); print($newlink); // Affiche : <a href="100foo">link</a>
J'ai essayé plusieurs techniques sans succès, comme de créer une fonction de concaténation que j'ai passée en 2ème paramètre du preg_replace sans plus de succès.
Et impossible non plus de multiplier par 10 le chiffre, comme dans l'exemple ci-dessous :
Là aussi, pour une raison qui m'échappe totalement, ça ne passe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $link = '<a href="100">link</a>'; $newlink = preg_replace('/(<a href=")(\d+)("[^>]*>[^<]+<\/a>)/', "$1".(intval("$2")*10)."$3", $link); print($newlink); // Affiche : ">link</a>
Voilà voilà... si vous avez des idées pour contourner ça, je suis preneur !
Merci d'avance, amis développeurs
Partager