0
votes

Remplacez la fin aléatoire et ajoutez des caractères par regex

J'ai une liste d'URL avec une chaîne de fin aléatoire comme celle-ci:

/paris-chambre-doubletriplequadruple-confort-avec-petit-dejeuner-a-lhotel-de-france-gare-de-lyon-pour-2-a-4-pers.html

Maintenant, j'essaye depuis quelques jours de trouver une expression régulière pour convertir cette ligne en:

/paris-chambre-doubletriplequadruple-confort-avec-petit-dejeuner-a-lhotel-de-france-gare-de-lyon-pour-2-a-4-pers-.html

Le problème est les chaînes aléatoires:

3d0b087-5701-4199-9d9c-147cca687263
33d0b087-5701-4199-9d9c-147cca687263

Je dois supprimer cette partie sans avoir la dernière - et ajouter. html: ajoutez une barre oblique avant l'url comme ça:

Je ne veux pas de ceci:

/paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes.html

/paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4-f707b0fe-31cb-4507-b7b3-7b91695bff9c.html

Mais ceci:

paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes-8ae0676c-aba2-4cf2-9391-91096a247672

paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4-f707b0fe-31cb-4507-b7b3-7b91695bff9c 

Ceci est pour un nouveau serveur Linux, exécutant MySQL 5, PHP 7 et Apache 2


0 commentaires

3 Réponses :


1
votes

Vous pouvez capturer dans un groupe ce qui précède le motif que vous souhaitez associer et supprimer. Ensuite, dans le remplacement, utilisez le premier groupe de capture:

/paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes.html
/paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4.html

Cela correspondra à:

  • ^ Début de chaîne
  • (. *) Capturer dans un groupe correspondant à n'importe quel caractère 0 fois et plus
  • - [a-f0-9] + Faire correspondre le trait d'union suivi de 1+ fois 0-9 ou a-f
  • (?: - [a-f0-9] +) {4,5} Répétez 4 à 5 fois avec un tiret suivi de 1+ fois 0-9 ou a-f
  • $ Fin de chaîne

Remplacez par une barre oblique et capturez le groupe 1 suivi de .html

$strings = [
    "paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes-8ae0676c-aba2-4cf2-9391-91096a247672",
    "paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4-f707b0fe-31cb-4507-b7b3-7b91695bff9c"
];

foreach ($strings as $string){
    echo preg_replace('/^(.*)-[a-f0-9]+(?:-[a-f0-9]+){4,5}$/', '/$1.html', $string) . PHP_EOL;
}

Démo Regex | démo php

Par exemple

/$1.html

Résultat:

^(.*)-[a-f0-9]+(?:-[a-f0-9]+){4,5}$


2 commentaires

Et si je veux ça avec regex? 8ae0676c-aba2-4cf2-9391-91096a247672-paris-chambre-double-cl‌ assique-avec-option-‌ petit-dejeuner-a-lho‌ tel-trianon-rive-gau‌ che-4-pour-2- personn‌ es.html Résultat à faire: paris-chambre-doubletriplequadruple-confort-avec-petit-dejeu‌ ner-a-lhotel-de-fran‌ ce-gare-de-lyon-pour‌ -2-a-4- pers.html La chaîne est toujours aléatoire mais elle ressemble à ça: 8ae0676c-aba2-4cf2-9391-91096a247672- Merci


@ Sébastien Vous pouvez utiliser ce motif ^ [a-f0-9] + (?: - [a-f0-9] +) + - et le remplacer par une chaîne vide. regex101.com/r/X8rNHb/2 ou avec une barre oblique.



0
votes

Donc, ces chaînes sont toutes dans le même format?

8 - 4 - 4 - 4 - 12 caractères alphanumériques

Alors l'expression régulière pour cela pourrait être:

$input = "paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes-8ae0676c-aba2-4cf2-9391-91096a247672";
$str = preg_replace("/-\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/", "$1.html", $input);

( \ w équivaut à [a-zA-Z0-9 .)

En PHP, vous ' d faire quelque chose comme ceci:

/-\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/


0 commentaires

0
votes

Étant donné que vos commentaires semblent indiquer que la sous-chaîne d'identification unique peut être au début ou à la fin de la chaîne, je recommande de ne pas appliquer le .html au remplacement - juste concaténé / append

Rendez le tiret de début / fin facultatif pour plus de flexibilité.

Code: ( Démo )

paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes.html
---
paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4.html
---

Sortie:

$strings = [
    "paris-chambre-double-classique-avec-option-petit-dejeuner-a-lhotel-trianon-rive-gauche-4-pour-2-personnes-8ae0676c-aba2-4cf2-9391-91096a247672",
    "f707b0fe-31cb-4507-b7b3-7b91695bff9c-paris-chambre-double-standard-avec-petit-dejeuner-et-acces-spa-pour-2-personnes-a-lhotel-le-mareuil-4"
];

foreach ($strings as $string) {
    echo preg_replace(
             '/-?[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}-?/',
             '',
             $string
         ) . '.html';
    echo "\n---\n";
}


0 commentaires