Skip to content

Instantly share code, notes, and snippets.

@julp
Last active May 3, 2020 13:41
Show Gist options
  • Save julp/e9a0ad606d1bc35fb768d47a718bc933 to your computer and use it in GitHub Desktop.
Save julp/e9a0ad606d1bc35fb768d47a718bc933 to your computer and use it in GitHub Desktop.
[OC] Expression régulière pour parser des joueurs de foot

https://openclassrooms.com/forum/sujet/php-expressions-rationelles-suite-2

Sortie :

1 Casemiro : 7.54
2 Eden Hazard : 7.50
3 Daniel Carvajal : 7.28
4 Toni Kroos : 7.26
5 Nacho : 7.21
6 Marcelo : 7.06
7 Raphael Varane : 7.04
8 Eder Militão : 7.02
9 Ferland Mendy : 6.99
10 Sergio Ramos : 6.94
11 Luka Modric : 6.91
12 James Rodriguez : 6.87
13 Federico Valverde : 6.84
14 Gareth Bale : 6.84
15 Thibaut Courtois : 6.81
16 Lucas Vázquez : 6.74
17 Isco : 6.71
18 Vinícius Júnior : 6.69
19 Rodrygo : 6.69
20 Álvaro Odriozola : 6.49
21 Luka Jovic : 6.39
22 Alphonse Areola : 6.28
23 Mariano : 6.26
24 Brahim Díaz : 6.03
<?php
$chaine = <<<'EOS'
1
Casemiro
28, MDC 185 84 25 2220 3 2 9 - 1.4 83.8 3 2 7.54
2
Eden Hazard
29, M(CGD),AC 175 74 9(1) 749 1 1 - - 1.2 85.1 0.6 1 7.50
3
Karim Benzema
32, AC 185 81 25(1) 2221 14 6 - - 3.7 85 1.1 7 7.39
4
Daniel Carvajal
28, D() 173 73 22 1980 1 5 8 - 0.6 86.5 1.3 3 7.28
5
Toni Kroos
30, M(C) 183 76 23(1) 1880 3 5 1 - 1.8 93.6 0.5 2 7.26
6
Nacho
30, D(CG) 180 76 4(1) 393 1 - 3 - 1.2 86.8 2.8 1 7.21
7
Marcelo
31, D(G) 174 75 11 940 - 2 2 - 1.2 85.4 0.6 - 7.06
8
Raphael Varane
27, D(C) 191 81 23 2070 2 1 2 - 0.4 86.9 2.8 1 7.04
9
Eder Militão
22, D(C) 186 79 7(2) 633 - - 2 - 0.2 86.8 3.3 - 7.02
10
Ferland Mendy
24, D(G),M(G) 180 73 12(4) 1130 - 1 4 1 0.4 85.9 1.1 - 6.99
11
Sergio Ramos
34, D(C) 184 82 25 2220 5 - 7 - 1.2 90.7 2.2 - 6.94
12
Luka Modric
34, M(C) 172 66 14(8) 1355 3 4 3 1 1 88.8 0.5 2 6.91
13
James Rodriguez
28, MO(CGD) 180 75 4(3) 341 1 1 1 - 1.3 82.3 0.4 - 6.87
14
Federico Valverde
21, M(CG) 182 78 14(8) 1266 2 4 1 - 0.9 87.3 0.9 - 6.84
15
Gareth Bale
30, M(CGD),AC 185 81 11(3) 992 2 2 2 1 2.2 79.6 1.9 - 6.84
16
Thibaut Courtois
27, GB 199 96 24 2160 - - - - - 73.8 0.2 - 6.81
17
Lucas Vázquez
28, M(D) 173 70 6(8) 640 2 1 1 - 0.6 82.4 0.1 - 6.74
18
Isco
28, MO(CGD),AC 176 79 11(5) 875 1 - 1 - 1.1 87.5 0.4 - 6.71
19
Vinícius Júnior
19, MO(G) 176 73 8(11) 901 2 1 3 - 1.6 80.1 0.1 - 6.69
20
Rodrygo
19, MO(CGD) 174 64 8(4) 666 2 - - - 0.9 89.4 0.3 - 6.69
21
Álvaro Odriozola
24, D() 176 66 4 344 - 1 1 1 0.5 91.1 - - 6.49
22
Luka Jovic
22, AC 182 85 4(11) 392 2 1 2 - 0.9 80.8 0.9 - 6.39
23
Alphonse Areola
27, GB 195 94 3 270 - - 1 - - 79.2 - - 6.28
24
Mariano
26, AC 180 76 0(2) 22 1 - - - 2 83.3 1 - 6.26
25
Brahim Díaz
20, MO(G) 171 68 0(3) 23 - - - - - 77.8 - - 6.03
EOS;
$pattern = <<<'EOP'
~
# début de la chaîne ou nouvelle ligne
# première ligne
# (?:^|\R)
\d+\s*
# saut de ligne
# deuxième ligne
\R
# nom du joueur
(?P<joueur>.+)
# saut de ligne
# troisème ligne
\R
# colonne 1 : un nombre
\d+
,
\s+
# colonne 2 : poste
\S+
\s+
# colonne 3 : entier
\d+
\s+
# colonne 4 : entier
\d+
\s+
# colonne 5
\S+
\s+
# colonne 6 : entier
\S+
\s+
# colonne 7 : entier ou "-" ?
\S+
\s+
# colonne 8 : entier ou "-" ?
\S+
\s+
# colonne 9 : entier ou "-" ?
\S+
\s+
# colonne 10 : entier ou "-" ?
\S+
\s+
# colonne 11 : entier ou "-" ?
\S+
\s+
# colonne 12 : flottant
(?:\d+\.\d+)
\s+
# colonne 13 : flottant ou "-" ?
\S+
\s+
# colonne 14 : flottant ou "-" ?
\S+
\s+
# colonne 15 : flottant
(?P<note>\d+\.\d+)
~x
EOP;
preg_match_all($pattern, $chaine, $matches, PREG_SET_ORDER);
#var_dump($matches);
$i = 0;
foreach ($matches as $m) {
echo ++$i, ' ', $m['joueur'], ' : ', $m['note'], PHP_EOL;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment