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
3 Réponses :
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;
}
Par exemple
/$1.html
Résultat:
^(.*)-[a-f0-9]+(?:-[a-f0-9]+){4,5}$
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.
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}$/
É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";
}