Bonjour Eric !
Petit à petit, je progresse...
Ça fonctionne... Pas selon tous mes voeux, certes, mais je sens que je suis sur la bonne piste.
Voici, d'une part, la regex que j'utilise (explications suivent) :
"#([0-9]+)\ \:\ ([a-zA-Z\'\ \.\-Ééèî\s]+) ([0-9]+)\-([0-9]+|\?)([a-z\<\ \/\>]+)#"
Et, d'autre part, le script PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
// ici, la connexion à la base de données
$table = "_a_list";
$pattern = "#([0-9]+)\ \:\ ([a-zA-Z\'\ \.\-Ééèî\s]+) ([0-9]+)\-([0-9]+|\?)([a-z\<\ \/\>]+)#";
$subject = mysql_query("SELECT ID, notes FROM $table WHERE ID < '101' AND notes != ''") or die ( "select error " .mysql_error () );
$matches = "";
if ( mysql_num_rows( $subject ) > 0) {
while ($row =mysql_fetch_array ($subject ) ) {
$flashstr .= $row ["ID" ]." : ".$row ["notes" ]."<br />";
preg_match_all ($pattern, $flashstr, $matches, 0, 0) ;
}
print_r ($matches);
}
?> |
Le résultat est visible à http://www.notre-annuaire.com/strict/new_regex.php
Explications :
La regex prend en compte :
a - les ID des élèves (indispensables pour la réattribution des données)
b - les "breaks" qui se trouvent dans les textes figurant dans la colonne 'notes'
Le tout présenté dans la ligne $flashstr du code PHP
La requête, pour les besoins du test, est limitée aux cent premières ID
Résultats :
Va sur la page... Tu comprendras mieux ce qui suit.
J'aime le fait que chaque ID est sur une ligne et que ma regex est efficace pour reconnaître les textes que je veux.
Je n'aime pas que me soit retourné uniquement le premier bloc pour une ID donnée.
Ainsi, par exemple, pour l'ID 1, je devrais avoir en plus de "Saint Cyr-l'École 1956-1958" les mentions "Billom 1958-1961" et "Nîmes 1959-1960"
Comment forcer l'exploration complète de tout le champ 'notes' de chaque ID ?
Enfin, je n'aime pas tout ce qui suit la ligne : "...98 : Tulle 1953-1959)" c'est à dire : " [1] => Array ( [0] => 1 [1] => 16 [2..............[14] =>) ) "
Je n'en ai pas besoin et n'arrive pas à m'en débarrasser.
Merci d'avance, cher mentor !
Partager