Bonjour,
Je recherche, dans une chaine CSV, toutes les occurrences du caractère servant à l'échappement du caractère de séparation des champ, présent dans un champ texte délimité.
le contexte est :
PHP
le caractère d'échappement est un caractère imprimable ascii simple (asc 33 à 126 pour faire court) (l'antislash (5C16, 9210) pour l'exemple.
le caractère de séparation des champs aussi (le point-virgule (3B16, 5910) pour l'exemple)
le champ texte contenant cette séquence est toujours délimité par un caractère de type guillemet (j'en ai trouvé 24 formes différentes en utf8) (guillemet double (2216, 3410) pour l'exemple).
Les chaînes à tester sont les exemples variés suivants :
"Laurent TOGIER";"19\; Rue Bréa";75006;PARIS ( 2 chaînes délimitées sans occurrence pour la première, une occurrence au milieu dans la seconde)
Laurent TOGIER;"\; Rue Bréa";75006;PARIS (1 occurrence au début du champ délimité)
Laurent TOGIER;"19\;";75006;PARIS (1 occurrence à la fin du champ délimité)
Laurent TOGIER;"\;";75006;PARIS (1 occurrence seule dans le champ délimité)
Laurent TOGIER;"19\; Rue\; Bréa";75006;PARIS (deux occurrences au milieu d'un champ délimité)
Laurent TOGIER;"\;\;";75006;PARIS (deux occurrences seules dans un champ délimité)
la regex : /".*?([^"]);.*?"/ me permet de repérer toutes les PREMIERES occurrences du caractère d'échappement dans le champ texte délimité,
Je pensais que la regex /".*?(([^"]);.*?)+"/ me permettrait d'avoir toutes les occurrences dans $m[2], alors qu'elle ne me permet que de voir la dernière occurrence dans chaque champ texte concerné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $chaines = '"Laurent TOGIER";"19\; Rue Bréa";75006;PARIS Laurent TOGIER;"\; Rue Bréa";75006;PARIS Laurent TOGIER;"19\;";75006;PARIS Laurent TOGIER;"\;";75006;PARIS Laurent TOGIER;"19\; Rue\; Bréa";75006;PARIS Laurent TOGIER;"\;\;";75006;PARIS'; $dlmtTxt = '"'; $sepChmp = ';'; $rgxEsc = "/$dlmtTxt.*?([^$dlmtTxt])$sepChmp.*?$dlmtTxt/"; preg_match_all($rgxEsc, $chaines, $m); $escp = []; foreach($m[1] as $v) { ...
Pourriez-vous svp m'aider ?
une indication, un signe, une piste vers la solution, seront les bienvenus.
Merci par avance,
Roland
Partager