Nettoyer fichier avec regex

WRInaute occasionnel
Salut,

J'essaie de supprimer des chiffres qui sont dans un fichier .xhtml sur mon ordinateur mais j'ai un peu de mal avec la boucle et les regex. Voici comment se trouve ces chiffres dans mon fichier_a_nettoyer.xhtml :

Code:
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl295','')">1925&nbsp;<span style='color:green'>-10%</span>
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl296','')">2210&nbsp;<span style='color:green'>-5%</span>

Je souhaite supprimer les chiffres avec l'espace derrière ces chiffres "1925&nbsp;", "2210&nbsp;", etc... ce qui donnerait une fois nettoyer :

Code:
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl295','')"><span style='color:green'>-10%</span>
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl296','')"><span style='color:green'>-5%</span>

Voici mon code :

Code:
$fp = join( '', file( 'http://127.0.0.1/mon-site.com/fichier_a_nettoyer.xhtml' ) );
while(!feof($fp))
{
$toute_ligne = fread($fp, 8192);
$motif = "`<a href=\"javascript:__doPostBack([^<]+)\">[^<]+<span style='color:green'>`";
preg_match_all($motif,$fp,$out);
$toute_ligne = str_replace("".$out[0][0]."","",$toute_ligne);
fwrite($fp,$toute_ligne);
}
fclose($fp);

Ca marche pas avec ce code, quelqu'un peut-il m'aider un peu ?

D'avance merci.
 
WRInaute accro
Sans vouloir être méchant, je ne sais pas trop ce qui pourrait marcher dans ton code... Il y a un sale mélange entre descripteurs de fichiers, chaîne de caractères, regex, remplacements, et j'en passe. La regex est aussi assez fantaisiste. Il faudrait peut-être que tu consacres un peu de temps à lire la doc de PHP, ça pourrait aider...

Je n'ai pas l'habitude de coder en PHP, mais j'aurais tendance à dire:
Code:
$file = file_get_contents("nom_du_fichier");
$conversion = preg_replace('/(<a href="javascript:__doPostBack[^>]+>)[^<]+(<span style=.color:green.>)/','$1$2',$file);
echo $conversion;

Reste ensuite à savoir ce que tu veux faire une fois la conversion faite (juste afficher, sauvegarder dans un fichier...).

Jacques.
 
WRInaute occasionnel
Vraiment MERCI Jacques pour ton aide, tes 3 lignes de codes font exactement ce que je souhaitais faire :eek:

Je savais déjà que je n'étais pas un génie en programmation php mais là tu viens de me le prouver, j'ai un peu honte :oops:

Encore merci, tu ne peux pas t'imaginer le coup de pouce que tu viens de me donner !
 
WRInaute occasionnel
Voilà un nouveau casse tête pour moi (oui je sais je suis pas bien doué :cry: ) :

J'ai 3 tableaux dans un fichier html (structure des tableaux <table><tr><td></td><td></td><td></td><td></td></tr></table>, etc...) contenant chacun 20 chiffres, chaque tableau est identique par sa structure mais pas par son contenu, ces tableaux ressemblent à ça :

1er tableau
--| A | B | C | D
1 | 12 21 66 77
2 | 14 87 44 63
3 | 23 10 58 88
4 | 52 54 87 78
5 | 44 55 33 11

Je souhaite lister chaque tableau, comme cela :

A1 => 12
B1 => 21
C1 => 66
D1 => 77
A2 => 14
B2 => 87
etc... jusqu'à la fin de mon troisième tableau

J'ai bidouillé ce code ci-dessous :

Code:
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html $out[0]

Cela fonctionne bien et si j'exécute le code ci-dessous :

Code:
for($i=0;$i<$max;$i++) 
{ 
echo "".$out[0][$i]."</br>"; 
}

J'aurais bien tous mes chiffres les uns sous les autres :

Code:
12
21
66
77
14
87
etc...

Comment rajouter les (A1, B1, C1, etc...) devant mes chiffres :

Code:
A1 => 12
B1 => 21
C1 => 66
D1 => 77
A2 => 14
B2 => 87
etc...

J'ai essayé pas mal de solutions mais je bloque !

Code:
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html 

$headers=array('1er tableau','2ième tableau','3ième tableau');
$headers2=array('A','B','C','D');
$headers3=array('1','2','3','4','5');
for($i=0;$i<sizeof($headers);$i++){
    for($i2=0;$i2<sizeof($headers2);$i2++){
        for($i3=0;$i3<sizeof($headers3);$i3++){
                echo "$headers[$i] $headers2[$i2] $headers3[$i3] => $out[0][$max]<br>";
    }
 }
}

Merci pour votre aide.
 
WRInaute occasionnel
J'ai trouvé la solution (comme quoi j'ai pas le crâne si vide que ça :p ) :

Code:
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html 

$headers=array('1er tableau','2ième tableau','3ième tableau');
$headers2=array('A','B','C','D');
$headers3=array('1','2','3','4','5');

$i4=0;
while($i4<$max){
for($i=0;$i<sizeof($headers);$i++){
    for($i2=0;$i2<sizeof($headers2);$i2++){
        for($i3=0;$i3<sizeof($headers3);$i3++){
                echo "$headers[$i] $headers2[$i2] $headers3[$i3] => ".$out[0][$i4]."<br>";
$i4++;
            }
    }
 }
}
 
Discussions similaires
Haut