par
Hubert Roksor » 30 mai 2007, 18:11
La chaine langage machine se retrouve avec 3 liens imbriqués
Ça on peut l'éviter en classant les définitions par ordre de longueur décroissant.
Essaie avec ça, tu me diras ce que ça donne chez toi. J'essaierai d'y revenir un peu plus tard si possible.
<?php
function cache_defs()
{
$list = '518#Navigateur;1643#Microsoft;1470#Vbscript;13#ActiveX;33#DVD-R;668#Script;129#Code;391#HTML;431#Java;548#OLE;1234#OCX;1050#C++;69#C;';
preg_match_all('/(.+?)#(.+?);/', $list, $m);
$m[2] = array_map('strtolower', $m[2]);
$defs = array_combine($m[2], $m[1]);
uksort($defs, create_function('$a,$b', 'return (isset($a[strlen($b)])) ? -1 : 1;'));
$list = implode('|', array_map('preg_quote', $m[2]));
// Modifie les caractères non-alpha de façon à ce que "CD-I", "CD/I" et "CDI" soit traités de la
// même manière
// $list = implode('|', array_map(create_function('$str', "return preg_replace('#\\W+(?=\\w)#', '\\\\W*', preg_quote(\$str, '#'));"), $m[2]));
$regex = '#(?:\\b|^)('. $list . ')#i';
file_put_contents('./data.defs.php', '<?php return ' . var_export($defs, true) . ';');
file_put_contents('./regex.txt', $regex);
}
[quote="Cobaye"]La chaine langage machine se retrouve avec 3 liens imbriqués[/quote]
Ça on peut l'éviter en classant les définitions par ordre de longueur décroissant.
Essaie avec ça, tu me diras ce que ça donne chez toi. J'essaierai d'y revenir un peu plus tard si possible.
[php]<?php
function cache_defs()
{
$list = '518#Navigateur;1643#Microsoft;1470#Vbscript;13#ActiveX;33#DVD-R;668#Script;129#Code;391#HTML;431#Java;548#OLE;1234#OCX;1050#C++;69#C;';
preg_match_all('/(.+?)#(.+?);/', $list, $m);
$m[2] = array_map('strtolower', $m[2]);
$defs = array_combine($m[2], $m[1]);
uksort($defs, create_function('$a,$b', 'return (isset($a[strlen($b)])) ? -1 : 1;'));
$list = implode('|', array_map('preg_quote', $m[2]));
// Modifie les caractères non-alpha de façon à ce que "CD-I", "CD/I" et "CDI" soit traités de la
// même manière
// $list = implode('|', array_map(create_function('$str', "return preg_replace('#\\W+(?=\\w)#', '\\\\W*', preg_quote(\$str, '#'));"), $m[2]));
$regex = '#(?:\\b|^)('. $list . ')#i';
file_put_contents('./data.defs.php', '<?php return ' . var_export($defs, true) . ';');
file_put_contents('./regex.txt', $regex);
}[/php]