Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1435 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [Regexp] Supprimer tous les espaces,\t,\n\r en dehors des balises

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Regexp] Supprimer tous les espaces,\t,\n\r en dehors des balises

n°667393
*syl*
--> []
Posté le 08-03-2004 à 15:45:08  profilanswer
 

Coucou :hello:  
 
Voilà, j'suis un bleu en regexp c'est pkoi j'vous demande un petit coup de pouce [:*syl*]  
 
Je voudrais faire une regexp qui prend du xhtml en entrée et qui vire tous les espaces, \t, \r, \n en dehors des balises..
 
Exemple bidon pour ceux qui ont pas compris :

  <p>coin coin</p>  <span id="plop">PlOp</span>
   <p>coin coin</p>  <span id="plop">PlOp</span>


donne

<p>coin coin</p><span id="plop">PlOp</span><p>coin coin</p>  <span id="plop">PlOp</span>


 
J'ai maté un peu le source de Smarty (fichier Smarty_Compiler.class.php) mais euh.. :whistle:

Code :
  1. $compiled_content = '';
  2.         /* Interleave the compiled contents and text blocks to get the final result. */
  3.         for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) {
  4.             if ($compiled_tags[$i] == '') {
  5.                 // tag result empty, remove first newline from following text block
  6.                 $text_blocks[$i+1] = preg_replace('!^(\r\n|\r|\n)!', '', $text_blocks[$i+1]);
  7.             }
  8.             $compiled_content .= $text_blocks[$i].$compiled_tags[$i];
  9.         }
  10.         $compiled_content .= $text_blocks[$i];
  11.         /* Reformat data between 'strip' and '/strip' tags, removing spaces, tabs and newlines. */
  12.         if (preg_match_all("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s", $compiled_content, $_match)) {
  13.             $strip_tags = $_match[0];
  14.             $strip_tags_modified = preg_replace("!{$ldq}/?strip{$rdq}|[\t ]+$|^[\t ]+!m", '', $strip_tags);
  15.             $strip_tags_modified = preg_replace('![\r\n]+!m', '', $strip_tags_modified);
  16.             for ($i = 0, $for_max = count($strip_tags); $i < $for_max; $i++)
  17.                 $compiled_content = preg_replace("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s",
  18.                                                   $this->_quote_replace($strip_tags_modified[$i]),
  19.                                                   $compiled_content, 1);
  20.         }


 
Voilà, donc si vous avez des idées/solutions, j'suis preneur :D

mood
Publicité
Posté le 08-03-2004 à 15:45:08  profilanswer
 

n°667400
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-03-2004 à 15:52:37  profilanswer
 

tiens essaye avec ça:

Code :
  1. /\/(.*?)\>(\W+?)\</\/$1></gs


ça donne bien ton exemple...
 
Par contre si tu avais eu:

Code :
  1. <p>coin coin</p>  <span id="plop">PlOp  Plop Plop
  2. Plop</span>
  3.    <p>coin coin</p>  <span id="plop">PlOp</span>


tu obtiens:

Code :
  1. <p>coin coin</p><span id="plop">PlOp  Plop Plop
  2. Plop</span><p>coin coin</p><span id="plop">PlOp</span>


si tu voulais pas ça, en t'inspirant de ma regex tu devrais trouver ton bonheur!

n°667402
*syl*
--&gt; []
Posté le 08-03-2004 à 15:54:12  profilanswer
 

Sisi c'est exactement ça que je voulais, pas de modifications à l'intérieur des balises, je teste ta regexp pour différents cas et je te dis quoi, merci :)

n°668165
*syl*
--&gt; []
Posté le 09-03-2004 à 08:37:44  profilanswer
 

Code :
  1. <?php
  2. $html =  '<p>coin coin</p>  <span id="plop">PlOp</span>
  3.    <p>coin coin</p>  <span id="plop">PlOp</span>' ;
  4.  
  5. echo "<br><br><br>AVANT : <br><br><br>" ;
  6. echo "<pre>$html</pre>" ;
  7. preg_replace('/\/(.*?)\>(\W+?)\</\/$1></gs', '', $html) ;
  8. echo "<br><br><br>APRES : <br><br><br>" ;
  9. echo "<pre>$html</pre>" ;
  10. ?>


 
Il me sort un

Citation :

Warning: Unknown modifier '\' in c:\appserv\www\portail\tests\test_regexp.php on line 9

:/

n°668187
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-03-2004 à 09:15:45  profilanswer
 

essaye en virant les \ devant les > et les <

Code :
  1. preg_replace('/\/(.*?)>(\W+?)</\/$1></gs', '', $html) ;


en tous cas je l'ai testé en perl et ça marchait.
 
ps: il est pas valide ton xhtml :o

n°668264
*syl*
--&gt; []
Posté le 09-03-2004 à 10:27:07  profilanswer
 

Pour les intéressés :

Code :
  1. <?php
  2. $html =  "<p>coin coin</p>  <span id=\"plop\">PlOp</span> <a>test</a>\n\t<plop>toto</plop>";
  3.  
  4. echo "AVANT : " ;
  5. echo "<pre>$html</pre>" ;
  6. $html = preg_replace("/(.*> )(\s*)(< )/U", "\\1\\3", $html) ;
  7. echo "\nAPRES : " ;
  8. echo "<pre>$html</pre>" ;
  9. ?>


 
Ça n'a plus rien à voir avec ta regexp Anapajari mais merci qd même pour ton aide :jap:

n°668269
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-03-2004 à 10:32:35  profilanswer
 

boaaah ça ressemble quand même...
Perso par contre je mettrais (\s+) sinon il va effectuer le traitement chaque fois qu'il trouvera >< dans ta variable!

n°668273
*syl*
--&gt; []
Posté le 09-03-2004 à 10:35:39  profilanswer
 

Ok, j'ai fais la modif, merci du conseil :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [Regexp] Supprimer tous les espaces,\t,\n\r en dehors des balises

 

Sujets relatifs
[CSS] des espaces entre mes DIV....Supprimer les doublons dans un List COntrol
[C] supprimer les echos de caracteres sur Unix[PYTHON] Comment faire pour supprimer un fichier ?
Comment supprimer un projet avec CVS[ XHTML ] Les Balises
comment copier ou supprimer un fichier sur le disque dur en c++ ?Rechercher mot en ignorant les balises html
bug de ASP - SQL serveur ?? tabulations et espaces aléatoires...[gros volume inside] Enlever les balises xml et sauver en ascii
Plus de sujets relatifs à : [Regexp] Supprimer tous les espaces,\t,\n\r en dehors des balises


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR