Trouver la bonne expression regulière
JRedon -
Bonjour, Je n'arrive pas à me dépatouiller d'un cas bien précis que voila:
j'ai des chaines de caractères du genre ci dessous
$ligne="Kyriak Kostandi(%Lilacs (1902) % % % %"
$ligne="Harold Harvey(%A Kitchen Interior%1918 % % %"
je voudrais obtenir dans $ligne:
Kyriak Kostandi()Lilacs 1902
Harold Harvey()Kitchen Interior 1918
en utilisant les expressions régulières, j'ai écrit:
$ligne=preg_replace('#(\w+)(%\()(\w+ ?)( ?[\(|%][0-9]{4})(.*)#',"$1()$3 $4",$ligne) ;
et j'obtiens
Kyriak Kostandi()
Harold Harvey()
si un pro du php pouvait m'expliquer où est l'erreur, il aurait toute ma reconnaissance. D'avance milles merci
Jacques
- Trouver la bonne expression regulière
- Trouver adresse mac - Guide
- Ou trouver la corbeille - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Ou trouver l'adresse ip - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
3 réponses
Bonjour.
Pourquoi ne pas faire plusieurs expressions simples plutôt qu'une seule indigeste ?
Surtout que les deux chaînes sont de différents formats, donc difficile dans une seule regex.
Quelque chose comme :
$ligne = "Harold Harvey(%A Kitchen Interior%1918 % % %"; $ligne = preg_replace('#\(%(\w )?#', '()', $ligne); $ligne = preg_replace('#( %)*$#', '', $ligne); $ligne = preg_replace('#\((\d{4})\)#', '$1', $ligne); $ligne = str_replace('%', ' ', $ligne); echo "'$ligne'";
Qu'on mettrait dans une fonction.
Bonjour
si tes lignes ont toutes le format que tu as montré
^([\w ]+?)[(%) ]*([\w ]+?)[(%) ]*(\d+)[(%) ]*$
A remplacer par
$1() $2 $3
Que tu peux testé là https://regex101.com/r/LnJEog/1