Expressions régulières : mauvais renvois :-/ - Forum Wordpress

A voir également:Expressions régulières : mauvais renvois :-/Expressions régulières php - Articles Expressions régulières javascript - Articles Excel 2010 expressions régulières ✓ - Forum - Excel Expressions régulières "ne contient pas ..." ✓ - Forum - Programmation Difficultés à créer des expressions régulières ✓ - Forum - Programmation

Bonjour,

Ma question porte sur les expressions régulières, dans le cadre d'un blog migré il y a 3 ans d'Over-blog (avec, à l'époque, 3 types d'adresses URL différents) vers Wordpress. J'avais été aidée avec succès à l'été 2016 sur ce forum programmation (pour renseigner ensuite le plugin redirection de Wordpress) mais j'ai dû réinstaller Wordpress en décembre puis reconfigurer les redirections fin avril (curieusement, des redirections qui ont marché ne marchent plus). Ma question semble trop avancée pour un webmaster / n'est pas en lien direct avec Wordpress.

Trois expressions régulières sont renseignées pour mon blog. Mais il y a une faille quelque part et je suis perdue... J'ai connaissance des sites pour tester les expressions mais ne les comprends pas tellement :-/

Les expressions utilisées :

\/(\w|\-)+\.html
/$1/

/(\d{4})/(\d{2})/(.*)\.html
/$1-$2-$3/

/(\d{4})/(\d{2})/(.*)\/
/$1-$2-$3/

Mon problème : je me retrouve avec ces interprétations :

- Cas 1

/2014-11-gouts-d-yvelines-2-2-mon-dejeuner-au-relais-chateaux-cazaudehore-la-forestiere.html/
/e// (le e du mot juste avant le point + un / après le html)
Ce qui existe : /2014-11-gouts-d-yvelines-2-2-mon-dejeuner-au-relais-chateaux-cazaudeho/

/2016-01-voyage-en-louisiane-la-nouvelle-orleans-cote-jardins-et-universite.html/
/e//
/2016-01-une-coupe-au-salon-coiffeur-de-paris-de-jordy-brechkoff.html/
/f//
/2015-03-le-bouffon-du-president-du-theatre-et-des-politiques.html/
/s// (le s du mot avant html)

- Cas 2

/article-the-a-la-menthe-ou-t-es-citron-50504411.html
/1/
/article-paris-sous-la-neige-de-solferino-aux-tuileries-41499862.html
/2/
Ce qui existe : /article-paris-sous-la-neige-de-solferino-aux-tuileries-41499862/

Historique des échanges que j'ai eus depuis 3 ans (pour info) :
https://www.commentcamarche.net/forum/affich-33736206-difficultes-a-creer-des-expressions-regulieres#p33737978 (2016)
https://www.commentcamarche.net/forum/affich-35756011-redirections-sous-wordpress-creation-d-expressions-regulieres
https://www.commentcamarche.net/forum/affich-36039743-creation-d-expressions-regulieres-a-utiliser-avec-l-extension-redirection-de-wp

Merci beaucoup de votre aide !

Bonne journée :-)

Configuration: Windows / Chrome 74.0.3729.169

Forum

A voir également:Expressions régulières : mauvais renvois :-/Expressions régulières php - Articles Expressions régulières javascript - Articles Excel 2010 expressions régulières ✓ - Forum - Excel Expressions régulières "ne contient pas ..." ✓ - Forum - Programmation Difficultés à créer des expressions régulières ✓ - Forum - Programmation

Web: www.shapebootstrap.net

8 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour

J'ai connaissance des sites pour tester les expressions mais ne les comprends pas tellement :-/


C'est pourtant pas très compliqué. Ils ont tous deux zones de saisie de texte:
  • une pour copier coller ton texte d'entrée
  • une pour écrire ta regex

Ensuite, ils présentent tous un résultat visuel des captures (souvent du surlignage), et des substitutions.

Il faut chercher un site adapté à ton langage, en effet, il peut y avoir des subtilité d'un langage à l'autre.
Par exemple, wordpress, c'est du PHP, il me semble. Et en PHP, la syntaxe est encadrée par / / comme les syntaxes que tu montres.

On va donc faire une regex de testeur PHP
https://www.qwant.com/?q=regex+tester+php&t=web

Et prendre le 2eme, parce que j'en ai déjà entendu parlé sur le forum
Si on y copie colle ton texte et ta première Regex cela donne ça https://regex101.com/r/0Sw4IV/1
Dans "test string", tout le texte est surligné en bleu, c'est la capture principale ($0), et le e juste avant le point de .html est en vert, c'est le 1er groupe ($1).
Si je teste tous tes liens du cas 1, on arrive au même résultat -> $1 est la dernière lettre avant .html.
Si je teste tous les liens du cas 2, on arrive au même résultat -> $1 est le dernier chiffre avant .html.


Ta seconde Regex présente un problème de syntaxe, les / intermédiaires ne lui plaisent pas, il sont surlignés en rouge dans "Regular Expression", et dans "Explenation" à droite on lit
/ An unescaped delimiter must be escaped with a backslash (\)

https://regex101.com/r/0Sw4IV/3

En échappant, comme demandé par le site, les 2 / cette regex ne capture rien
https://regex101.com/r/0Sw4IV/4

Quand à ta 3eme Regex, une fois corrigée de la même erreur, elle ne capture rien non plus
https://regex101.com/r/0Sw4IV/5


En 2016, je t'avais montré un exemple avec regexstorm.net, mais il est dédié à l'implémentation .Net (C#, VB.Net, ASP.Net C++.NET, J#, etc...)
Si j'essaye ta première Regex, j'obtiens un résultat un peu different.
$1 ne contient plus seulement le dernier caractère avant .html, mais chaque caractère séparé dans une sous-capture différente. Je ne sais pas si PHP gère les sous captures, en tout cas je n'ai pas trouvé si c'est possible sur regex101

C'est pourquoi, il est important de trouver un site de test qui fonctionne dans le langage dont tu as besoin.
Je n'ai pas été assez clair là dessus en 2016.


Pour ton problème d'aujourd'hui

/2014-11-gouts-d-yvelines-2-2-mon-dejeuner-au-relais-chateaux-cazaudehore-la-forestiere.html/
/e// (le e du mot juste avant le point + un / après le html)
Ce qui existe : /2014-11-gouts-d-yvelines-2-2-mon-dejeuner-au-relais-chateaux-cazaudeho/

Cela veut il dire, que tu veut capturer
2014-11-gouts-d-yvelines-2-2-mon-dejeuner-au-relais-chateaux-cazaudeho
?
Si oui la taille est-elle le critère pour tronquer le lien?

Reply
réponses:
  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Avec cette syntaxe

(\/[\w-]{1,70})[\w-]*\.html\/
, 3 exemples fonctionnent
https://regex101.com/r/1D8nEt/1

Pour l'accent circonflexe, je ne sais pas

Reply
réponses:
  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Le fait est que je ne connais pas du tout wordpress.
Je me suis contenter d’écrire une regex qui répond aux quelques exemples que tu as donnés.

Cependant, il est bien possible qu’elle provoque des effets de bord sur certains liens.

As tu la possibilité d’extraire tous tes liens dans un fichier et le mettre sur cjoint.

Reply
réponses:
  • auteur

  • auteur

  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour
Tant mieux pour tes stats.
Je vais déplacer le sujet dans le forum wordpress.
Peut-être que quelqu’un sait comment les directions fonctionnent.

D’un autre côté, si tu arrives à extraire la table links vers un csv, un ficher excel etc... je suis toujours preneur.

Reply
réponses:
  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Je viens de t'envoyer par MP, un nouveau fichier réduit, il y a 18885 liens différents.

Avec cette regex

\/(\d{4})\/(\d{2})\/([^.]{1,62}).+
et ça en remplacement
/$1-$2-$3/

Il y a 246 captures de ce type

/2015/12/pe-gase-icare-le-spectacle-du-cirque-alexis-gruss.html
/2015/12/pe-gase-icare-le-spectacle-du-cirque-alexis-gruss/
/2016/06/un-afterwork-autour-du-cafe-lavazza-au-village-de-roland-garros.html
/2016/06/degustabox-le-coffret-culinaire-surprise-de-mai-2016/
/2016/03/maris-et-femmes-un-peu-de-woody-allen-sur-la-scene-du-theatre-de-paris/
/2016/03/maris-et-femmes-un-peu-de-woody-allen-sur-la-scene-du-theatre-de-paris.html

qui donnent une redirection de ce type

/2015-12-pe-gase-icare-le-spectacle-du-cirque-alexis-gruss/
/2015-12-pe-gase-icare-le-spectacle-du-cirque-alexis-gruss/
/2016-06-un-afterwork-autour-du-cafe-lavazza-au-village-de-roland-garro/
/2016-06-degustabox-le-coffret-culinaire-surprise-de-mai-2016/
/2016-03-maris-et-femmes-un-peu-de-woody-allen-sur-la-scene-du-theatre-/
/2016-03-maris-et-femmes-un-peu-de-woody-allen-sur-la-scene-du-theatre-/


Cette regex (à appliquer en second, car elles capture aussi les précédents, mais ne traite pas les / entre l'année, le moi et le texte)
/([^.]{1,70}).+
et ce remplacement
/$1/
capture 1634 liens pour en faire des redirections comme cela

/ll-hellocoton/
/apple-app-site-associatio/
/article-mozart-opera-rock-une-comedie-musicale-fran-aise-efficace-6256/
/suivez-le-blog-de-lili-sur-les-reseaux-sociaux-twitter-facebook-instag/
/2015-11-cocktails-et-burgers-a-l-honneur-au-pub-saint-michel/
/2015-01-carnet-de-voyage-six-idees-de-visite-a-porto/nul/
/apple-touch-icon/
/apple-touch-icon-precomposed/
/apple-touch-icon-152x152/
/apple-touch-icon-152x152-precomposed/
/2014-09-le-chateau-de-vaux-le-vicomte-de-jour-et-de-nuit-aux-chandelle/
//2014-09-le-chateau-de-vaux-le-vicomte-de-jour-et-de-nuit-aux-chandell/
/2015-06-le-pas-sage-esprit-bistrot-et-plats-colores-dans-un-passage-pa/
/article-amsterdam-gourmand-quelques-adresses-sur-place-ou-a-emporter-8/
/article-amsterdam-gourmand-bagels-beans-pour-le-the-et-le-petit-dejeun/
/templates/system/css/system/
/admin/images/cal_date_over/
/2016-05-un-the-dans-le-jardin-le-salon-de-the-plein-de-charme-du-musee/
/2014-12-deux-belles-expos-a-paris-sonia-delaunay-au-mam-et-garry-winog/


Les 5 lignes qui ne sont pas capturés sont

/.com.old
/.asp.bak
/...nvers-restaus-hotel/
/.well-known/
/\"

Qui sont je pense des erreurs d'extraction de ton gros gros fichier.

Essaye ces 2 regex, dans l'ordre et dis moi ce que ça donne.

Bon week-end


PS: j'ai pas réussi à n'en faire qu'une à cause des remplacements
/$1-$2-$3/
donne
/--/
quand la 2eme regex capture la ligne...

Reply
réponses:
  • auteur

  • auteur

  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

il est bien possible que ma méconnaissance (et c'est peu dire) de wordpress soit à la manoeuvre.

J'ai bêtement cherché à écrire 1, puis 2 regex qui couvriraient 100% de tes adresses, y compris celles qui n'ont pas besoin d'être redirigées....

Je vais donc essayer l'inverser, ne capturer que les liens ayant besoin d'être redirigés.
A brûle pourpoint, je pense qu'il faudra 2 ou 4 regex pour remplacer les 2 que je t'ai proposées.

Mais en parallèle, pour limiter de prochaines erreurs je vais me documenter un peu sur les redirection wordpress. Est-ce l'extension décrite là https://wpmarmite.com/redirection-wordpress/ que tu utilises?


Je n'aurais pas le temps de m'y atteler dans la journée.
Peut-être ce soir.

Bonne journée.

Reply
réponses:
  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Je n'avais pas pris conscience avant nos derniers échanges qu'il y avait une sorte de priorité selon l'ordre dans lequel on ajoutait les regex. J'ai remis une formule qui semblait ne plus marcher en premier et cela semble l'avoir rendue de nouveau opérante.


Cela semble assez logique, du point de vue du "programmeur", si le lien est intercepté par une regex il est traité par celle-ci et ne passe pas à la suivante.

du coup /(\d{4})/(\d{2})/(.*) intercepte tout ce qui serait pris par /(\d{4})/(\d{2})/(.*)\.html
la partie commune (la première regex entière), veut dire
  • un /
  • 4 chiffres
  • un /
  • 2 chiffres
  • n'importe quel caractère, un nombre de fois indéterminée


la 2eme regex, ajoute
  • .html à la fin


Si un lien finit par .html il est intercepté par la première regex, dans ce cas, le .html est conservé, or il faut l'enlever.
Mettre /(\d{4})/(\d{2})/(.*) avant /(\d{4})/(\d{2})/(.*)\.html bloque de fait la seconde.

En plus, il semble acquis (j'ai fait quelques tests à la main sur ton blog, et ma femme a trouvé ça louche que je visite un site de ce genre ;) ), que le lien final ne doit pas faire plus de 70 caractères, or ces 2 regex ne prennent pas ça en compte.

Bref, j'essaye de m'y remettre en soirée.

Reply
réponses:
  • auteur

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Alors en premier position, je te propose

/(\d{4})/(\d{2})/([^./]{1,62}).*
et
/$1-$2-$3/

Comme le montre cet exemple (clique sur Contexte pour voir le remplacement), elle intercepte les liens qui
  • commencent par 4 chiffres / 2 chiffres /
  • puis jusqu'à 62 caractères saut le . (pour s'arrêter avant .html) ou / (pour éviter d'en avoir 2 à la fin du lien redirigé)
  • finit par n'importe quoi.


en 2eme position, les lien de moins de 70 caractères finissant par .html
/([^./]{1,69})\.html
et
/$1/

exemple

et en 3eme position les liens de plus de 70 caractère (peut importe la fin, sauf si le 71eme caractère est /)
/([^./]{70})[^/]+
et
/$1/

exemple
Cette fois, dans l'onglet Context, le saut de ligne des lignes interceptées est supprimée, mais ça ne devrait pas avoir d'influence pour toi, puisque dans un lien, y a pas de saut de ligne.
Au cas où, voici dans ce dernier exemple, la même qui prend en compte le saut de ligne

Par contre, gérer les accents ça se complique, car n'importe lequel des cas traiter par l'une des 3 regex peut contenir un accent, et n'importe où en plus

Reply
réponses:
  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

  • auteur

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed