Correction avec les expressions régulières

Correction avec les expressions régulières - Divers - Programmation

Marsh Posté le 14-10-2006 à 10:36:35    

Bonjour,
 
Je suis en train d'effectuer de très nombreuses corrction sur un cms et je me suis penché sur la correction ou plutot, la mise en conformité de certaines balise à l'aide d'expression régulières pour effectuer mes recherches...
 
Mais là, je butte sur l'expression régulière à faire pour que la recherche me sorte tous les fichiers qui contiennent une balise <img qui ne se finisse pas par /> (<-c'est surtout ca qui me pose probleme)
 
Pourriez-vous m'aider ?
 
Merci

Reply

Marsh Posté le 14-10-2006 à 10:36:35   

Reply

Marsh Posté le 16-10-2006 à 20:08:11    

Bon, devant la foule de réponse (c'est vrai que c'est chaud les regexp) j'ai tenté avec un amis de m'en sortir...
 
Mais ceci :
 
<img[^>]*[^/]>
 
Ne fonctionne pas dans les cas ou on a une balise de ce type :
 
<img src='<?php echo $chemin; ?>' alt='' >
 
Aidez moi svp

Reply

Marsh Posté le 17-10-2006 à 19:48:08    

pour l instant j en suis la
ca ramasse toutes les balises img meme celles avec du php dedans

/<img .*?(?<!\?)>/


mais j arrive pas a séparer celles qui sont bien fermées ou non donc j ai pas d autre idee que de faire un second nettoyage ensuite sur les resultats
je continue a y reflechir de mon coté
(un peu)

Reply

Marsh Posté le 18-10-2006 à 00:51:12    

merci beaucoup de ton aide...

Reply

Marsh Posté le 18-10-2006 à 09:16:21    

/<img(?:[^<]*?)(?<!\/)>/

Reply

Marsh Posté le 18-10-2006 à 13:48:24    

y'a un soucis avec ton expression anapajari :
Ca détecte :
preg_match("/<img?\s+src=([\"|'|`|])(.+?)\\1.+>/is", $im, $arr);
 
alors que cela ne devrais pas et ca ne détecte pas :
<img src='test.gif'>
 
alors que ca devrais...
 
Strange non ?

Reply

Marsh Posté le 18-10-2006 à 13:58:54    

bagu a écrit :

y'a un soucis avec ton expression anapajari :
Ca détecte :
preg_match("/<img?\s+src=([\"|'|`|])(.+?)\\1.+>/is", $im, $arr);
 
alors que cela ne devrais pas et ca ne détecte pas :
<img src='test.gif'>
 
alors que ca devrais...
 
Strange non ?


rien compris   [:roane]  [:roane]  
mais:

Code :
  1. <?php
  2. $a = "<img src='pouet'> <img src='pouet2' alt='truc'/> <img touiuiilout >";
  3. preg_match_all("/<img(?:[^<]*?)(?<!\/)>/", $a, $match);
  4. var_dump($match);
  5. ?>


affiche

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(17) "<img src='pouet'>"
    [1]=>
    string(18) "<img touiuiilout >"
  }
}


Et c'est bien ce que tu voulais non  :??:


Message édité par anapajari le 18-10-2006 à 13:59:44
Reply

Marsh Posté le 18-10-2006 à 14:04:41    

a voui...scuse...
 
J'explique...j'utilise un logiciel fonctionnant a l'aide de regexp pour chercher quels fichiers contiennent des balises non conformes...
 
Ainsi, si un fichier contient <img src='truc.gif'> au lieu de <img src='truc.gif' /> il doit être touvé grave au regexp...
 
Donc je cherche une regexp trouvant toutes les balises img non fermées par />

Reply

Marsh Posté le 18-10-2006 à 14:07:29    

Bin ma regex marche nickel :D
Et c'est normal que ça remonte:

Code :
  1. preg_match("/<img?\s+src=([\"|'|`|])(.+?)\\1.+>/is", $im, $arr);


vu que  

Code :
  1. <img?\s+src=([\"|'|`|])(.+?)\\1.+>


est une balise <img non terminée par un />

Reply

Marsh Posté le 18-10-2006 à 14:08:52    

voui...mais pourquoi <img src='truc.gif'> n'est pas détecté alors que la balise de fin est > et non /> ?
 
pour /<img?\s+src=([\"|'|`|])(.+?)\\1.+>/ , si je pige bien, il faudrais que je remplace cela par /<img?\s+src=([\"|'|`|])(.+?)\\1.+\/>/  non ?


Message édité par bagu le 18-10-2006 à 14:11:18
Reply

Marsh Posté le 18-10-2006 à 14:08:52   

Reply

Marsh Posté le 18-10-2006 à 14:29:18    

ha ben j ai compris pourquoi mes tests marchaient pas hier :D
j avais betement mis l assertion sur le / avant le ?  
avec ca ca devrait marcher impec [:huit]

/<img.*?(?<!\?)(?<!\/)>/

Reply

Marsh Posté le 18-10-2006 à 14:54:59    

idem que pour anapajari...Ca ne sort pas <img src='truc.gif'> en résultat :(

Reply

Marsh Posté le 18-10-2006 à 15:09:42    

mIRROR a écrit :

ha ben j ai compris pourquoi mes tests marchaient pas hier :D
j avais betement mis l assertion sur le / avant le ?  
avec ca ca devrait marcher impec [:huit]

/<img.*?(?<!\?)(?<!\/)>/



tu peux l'écrire comme ça c'est plus "clair":

/<img.*?(?<![\/|\?])>/


bagu a écrit :

idem que pour anapajari...Ca ne sort pas <img src='truc.gif'> en résultat :(


tu dois faire nawak car ma regex est testée et fonctionne ( voir l'exemple au dessus) et celle de mIRROR doit également être correcte.
 

Reply

Marsh Posté le 18-10-2006 à 15:10:33    

ben teste avec powergrep...tu verra ;)

Reply

Marsh Posté le 18-10-2006 à 15:11:03    

Et si son outil supporte pas les assertions arrières négatives ? [:opus dei]

Reply

Marsh Posté le 18-10-2006 à 15:13:02    

Chaos Intestinal a écrit :

Et si son outil supporte pas les assertions arrières négatives ? [:opus dei]


 

Citation :

PowerGREP's regular expression engine is fully compatible with popular regex flavors such as those used by Perl, Java and the .NET framework. PowerGREP also supports all the Perl 5 extensions, such as non-greedy operators and zero-width assertions. PowerGREP also supports the Java extensions (possessive quantifiers) to Perl's flavor, as well as the .NET framework's extensions (named capturing groups).


 
[:pingouino]

Reply

Marsh Posté le 18-10-2006 à 15:28:34    

anapajari a écrit :

tu peux l'écrire comme ça c'est plus "clair":

/<img.*?(?<![\/|\?])>/


 
tu dois faire nawak car ma regex est testée et fonctionne ( voir l'exemple au dessus) et celle de mIRROR doit également être correcte.


 
ah oui j avais des tests avec des ou mais pareil j avais mis le ? avant le / :D
 
sinon je confirme testé chez moi et ca marche tres bien :o
 
en bonus jte fous ma string de test

Citation :

'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris
augue arcu, placerat sed, v<img fdhfmjfmlsjdmqsjgdf /> arius vel, tempus eget, pede. Donec condimentum leo vel
purus. Sed luctus, risus vel tincidunt faucibus, diam turpis tristique erat, eget
tempor mi mi pretium<img fdhfmjfmlsjdmqsjgdf> metus. Ut a enim. Integer congue libero ac mauris. Aenean blandit
leo non orci. Fusce tempus, lacus sit amet iaculis sagittis, risus felis aliquam
massa, id congue <img <?skdjklsmqd skdmjfqsd ?> smxdhskjsdrc="hflsjdflgd/hjllsdklgm.gig"fkmd >dolor pede nec massa. In ut mi id orci euismod imperdiet. Praesent
pellentesque. Donec aliquet, ipsum nec dictum sollicitudin, arcu pede eleifend sem,
id mattis est jus<img <?skdjklsmqd skdmjfqsd ?> smxdhskjfkmd />to nec leo. Nam augue turpis, vestibulum eu, iaculis vel, commodo
id, magna. Aenean lectus enim, interdum eget, ultricies in, posuere a, ligula.'


 
et la reponse

Array
(
    [0] => Array
        (
            [0] => <img fdhfmjfmlsjdmqsjgdf>
            [1] => <img <?skdjklsmqd skdmjfqsd ?> smxdhskjsdrc="hflsjdflgd/hjllsdklgm.gig"fkmd >
        )
 
)

Reply

Marsh Posté le 18-10-2006 à 15:43:38    

donc ca les supporte...donc je pige pas d'ou viens le soucis...
 
ma ligne de test est très simple :  
 
<?php
 
echo "<img src='test.gif'>";
 
?>
 
et ca n'est pas détecté je n'y capte plus rien

Reply

Marsh Posté le 18-10-2006 à 15:54:03    

Code :
  1. <?php
  2. $a = '<?php
  3. echo "<img src=\'test.gif\'>";
  4. ?> ';
  5. preg_match_all("/<img(?:[^<]*?)(?<!\/)>/", $a, $match);
  6. var_dump($match);
  7. ?>


affiche:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(20) "<img src='test.gif'>"
  }
}


:o :o :o

Reply

Marsh Posté le 18-10-2006 à 15:54:23    

bagu a écrit :

<img src='<?php echo $chemin; ?>' alt='' >


 
 

bagu a écrit :

donc ca les supporte...donc je pige pas d'ou viens le soucis...
 
ma ligne de test est très simple :  
 
<?php
 
echo "<img src='test.gif'>";
 
?>
 
et ca n'est pas détecté je n'y capte plus rien


 
faudrait savoir :cry:
de toute facon ca marche quand meme :o
 
edit :
anapajari [:benou_grilled]


Message édité par mIRROR le 18-10-2006 à 15:55:32
Reply

Marsh Posté le 18-10-2006 à 18:04:43    

ca doit pouvoir détecter l'ensemble des possibilités de balises img
 
Par contre, je soutiens mordicus que quand je donne cette expression réguliere a manger a powergrep, ben il la digére, mais ne me sort pas les résultats simples :(

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed