[RESOLU] Supprimer une chaine avec expression régulière

Eléphanteau du PHP | 37 Messages

26 janv. 2016, 20:56

Bonjour,

Dans ma table wp_post et dans ma colonne post_content

J'ai une chaîne de caractère que j'aimerai supprimer dans tous mes enregistrements.

Cependant cette chaîne est variable par exemple :

Code : Tout sélectionner

<a style="text-decoration:none" href="/index.php?w=duprost-purchase">.</a>
OU

Code : Tout sélectionner

<a style="text-decoration:none" href="/index.php?w=fagt-purchase">.</a>
OU

Code : Tout sélectionner

<a style="text-decoration:none" href="/index.php?w=duprost-toot">.</a>
UPDATE wp_post (....)

Est il préférable de faire un script PHP ? sachant que j'ai plusieurs tables dans ma base de données ou j'ai ce problème.

Mammouth du PHP | 2703 Messages

26 janv. 2016, 21:19

s'il n'y a que ces trois cas, alors un update avec la fonction remplace de mysql dans phpmyadmin.
si le nombre de cas est très grand, alors un script php qui récupère le contenu du champ, applique un preg_replace au contenu et mets à jour par un update classique le champ.

Eléphanteau du PHP | 37 Messages

26 janv. 2016, 21:58

Bonsoir,
merci de votre réponse.
Il y a vraiment pas un moyen de le faire directement dans phpmyadmin avec une requète ?
cela m'arrangerait de le faire car je ne sais pas faire le script php et en plus j'ai bcp de table wp_???post différentes.

Eléphanteau du PHP | 37 Messages

26 janv. 2016, 22:00

J'aimerait avoir un exemple avec un preg_replace car la chaine est un peu complexe.

Mammouth du PHP | 2703 Messages

26 janv. 2016, 22:04

voir post442532.html#p442532 pour phpmyadmin

et https://regex101.com/r/bD2bN4/1 pour preg_replace

Eléphanteau du PHP | 37 Messages

26 janv. 2016, 23:48

re,
j'ai testé l'expression régulière (<a style="text-decoration:none" href="\/index\.php\?w=[^"]+">\.<\/a>) dans notepad++ ça fonctionne parfaitement.
Puis-je l'utiliser dans une requête pour par exemple une table wp_post et colonne post_content en phpmyadmin ?
Merci de votre aide précieuse

Eléphanteau du PHP | 37 Messages

27 janv. 2016, 17:34

re,
je suis presque au bout de ma recherche...

Code : Tout sélectionner

SELECT * FROM `couperinbase`.`wp159posts` WHERE (CONVERT(`post_content` USING utf8) REGEXP '(<a style="text-decoration:none" href="\\/index\\.php\\?w=[^"]+">\\.<\\/a>)')
Cela me permet de repérer les codes.
Je ne sais pas encore comment les supprimer avec phpmyadmin
Si quelqu'un à la solution !
Merci

Eléphanteau du PHP | 37 Messages

28 janv. 2016, 07:58

J'ai fait ce script php.

Code : Tout sélectionner

<?php $pattern = '<a style="text-decoration:none" href="\/index\.php\?w=[^]+">\.<\/a>'; $replacement = ''; echo preg_replace($pattern, $replacement, $chaine);
ça me met une erreur : Wwarning: preg_replace(): Unknown modifier '\'
Merci de votre aide...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 janv. 2016, 10:34

Ton motif de regex doit être entouré par des séparateurs, dans la doc PHP, ils utilisent le slash / mais je te recommande d'utiliser le caractère ` (Alt gr+7 sur un clavier Windows) car il est moins souvent présent dans les regex et donc ne risque pas d'interférer
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 37 Messages

29 janv. 2016, 07:51

re,
un grand merci.
J'aimerai aussi pouvoir intervenir en sql avec phpmyadmin.
Auriez-vous une solution pour compléter ça et supprimer le code...
Code : Tout sélectionner

Code : Tout sélectionner

SELECT * FROM `couperinbase`.`wp159posts` WHERE (CONVERT(`post_content` USING utf8) REGEXP '(<a style="text-decoration:none" href="\\/index\\.php\\?w=[^"]+">\\.<\\/a>)')
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 janv. 2016, 11:12

Jamais utilisé pour ma part cette possibilité de mysql donc difficile de t'aider.
Crée toi une table avec une 10aine d'enregistrement et fait des tests dessus pour trouver la bonne syntaxe
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 37 Messages

05 févr. 2016, 19:37

Merci à tous !