par
tesmet » 07 avr. 2018, 20:30
Hello, il y a preg_split() qui pourrait être utilisé si le format est toujours comme les 2 présentés en découpant sur la virgule d'une part et sur les mots "de au le" qui sont suivis d'un format de date d'autre part avec une assertion avant (?=...) pour ne pas découper la date elle-même.
<?php
$tests = array(
'Patinoire Valigloo, MARLY le 17/04/2018',
'Eglise St Julien Le Pauvre, PARIS 05 du 03/09/2017 au 25/03/2018',
);
foreach($tests as $test) {
$split = preg_split('#,\s*|\s+(du|au|le)\s+(?=\d+/\d+/\d+)#i', $test);
if(count($split) == 3) $split[] = $split[2]; // dupliquer la date dans le cas d'une date unique ?
echo "<pre>$test\n", print_r($split, true), "\n</pre>\n";
}
/*
# délimiteur
,\s* découper la virgule et les possibles blancs qui suivent
| ou bien, donc en toute logique après la virgule
\s+(du|au|le)\s+ découper sur l'un des mots "du au le" incluant les blancs avant et après
(?=\d+/\d+/\d+) et le mot doit être suivi du format de date \d+/\d+/\d+ sans découper cette date (?=...)
#i fin de l'expression avec le modificateur i pour insensible majuscule/minuscule
*/
affichera
Patinoire Valigloo, MARLY le 17/04/2018
Array
(
[0] => Patinoire Valigloo
[1] => MARLY
[2] => 17/04/2018
[3] => 17/04/2018
)
Eglise St Julien Le Pauvre, PARIS 05 du 03/09/2017 au 25/03/2018
Array
(
[0] => Eglise St Julien Le Pauvre
[1] => PARIS 05
[2] => 03/09/2017
[3] => 25/03/2018
)
Hello, il y a preg_split() qui pourrait être utilisé si le format est toujours comme les 2 présentés en découpant sur la virgule d'une part et sur les mots "de au le" qui sont suivis d'un format de date d'autre part avec une assertion avant (?=...) pour ne pas découper la date elle-même.
[PHP]<?php
$tests = array(
'Patinoire Valigloo, MARLY le 17/04/2018',
'Eglise St Julien Le Pauvre, PARIS 05 du 03/09/2017 au 25/03/2018',
);
foreach($tests as $test) {
$split = preg_split('#,\s*|\s+(du|au|le)\s+(?=\d+/\d+/\d+)#i', $test);
if(count($split) == 3) $split[] = $split[2]; // dupliquer la date dans le cas d'une date unique ?
echo "<pre>$test\n", print_r($split, true), "\n</pre>\n";
}
/*
# délimiteur
,\s* découper la virgule et les possibles blancs qui suivent
| ou bien, donc en toute logique après la virgule
\s+(du|au|le)\s+ découper sur l'un des mots "du au le" incluant les blancs avant et après
(?=\d+/\d+/\d+) et le mot doit être suivi du format de date \d+/\d+/\d+ sans découper cette date (?=...)
#i fin de l'expression avec le modificateur i pour insensible majuscule/minuscule
*/[/PHP]
affichera
[quote]Patinoire Valigloo, MARLY le 17/04/2018
Array
(
[0] => Patinoire Valigloo
[1] => MARLY
[2] => 17/04/2018
[3] => 17/04/2018
)
Eglise St Julien Le Pauvre, PARIS 05 du 03/09/2017 au 25/03/2018
Array
(
[0] => Eglise St Julien Le Pauvre
[1] => PARIS 05
[2] => 03/09/2017
[3] => 25/03/2018
)
[/quote]