Page 1 sur 1

[..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 12:53
par lesolutionneur
Bonjour tout le monde !

J'ai un extrait d'une page comme ceci:

Code : Tout sélectionner

<div class="subject ">Les prix de la choucroute ont augmenté ! :/</div>
    <span class="button select_choucroute s54x4558">
        <a href="/manger/choucroute.php?id=0007" target="_blank" style="color: white;width: 527px;text-align:center;display:block;">
            <img title = '' alt = ''  src = '/choucroute.png' width='74 height='4523' style = '' class = 'mangechoucroute_image ' id = ''/>
Manger de la choucroute
        </a>
    </span>
Et j'aimerais supprimer comme ça tous les trucs avec <div class="subject"> ou <div class="subject "> jusqu'au prochain </span>.

J'ai donc fait les regex suivantes:

Code : Tout sélectionner

$HTML = StringRegExpReplace($HTML, '(?s)(<div class="subject ">.*?</span>)', '.')
$HTML = StringRegExpReplace($HTML, '(?s)(<div class="subject">.*?</span>)', '.')
Le problème est que elle renvoit un @error = 0 ce qui signifie pas d'erreur et un @extended = 0 ce qui signifie que rien n'a été remplacé.

Je ne comprends pas sachant que toute la page contient plein de fois le même "schéma" de donnée présenté au-dessus mais rien n'est remplacé !

Pouvez-vous m'indiquer où je me suis trompé ?

Merci d'avance ! :D

(Config: windows XP, dernière version d'autoIT et IE 7 installé)

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 13:09
par Iste
Comme d'hab, commencez pas un clipput($HTML) pour le coller ensuite dans scite.

Il y a de forte chance qu'elle ne contient pas ce que vous pensez !

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 14:27
par jchd
Il doit manquer un (?m) en tête du pattern.

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 15:04
par lesolutionneur
Iste a écrit :Comme d'hab, commencez pas un clipput($HTML) pour le coller ensuite dans scite.

Il y a de forte chance qu'elle ne contient pas ce que vous pensez !
Je n'utilise pas scite.
J'obtiens ce html en l'enregistrant sur mon pc avec un script autoit.
Il doit manquer un (?m) en tête du pattern.
Expliquez-moi ce qui est à modifier merci.

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 15:43
par mikell
Le (?s) en tête du pattern permet de se dispenser du (?m)
J'obtiens ce html en l'enregistrant sur mon pc avec un script autoit.
Selon la manière dont c'est enregistré, tu peux avoir à la sortie un code différent (avec des &nbsp; pour les espaces, etc)
Les balises peuvent aussi être différentes
Perso j'essayerais ça

Code : Tout sélectionner

$HTML = StringRegExpReplace($HTML, '(?s)(<div.*?span>)', '.')

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 15:47
par jchd
Oooups j'avais regardé sans voir...
Je reprends donc mon (?m) et je me le remets dans ma poche.
:arrow:

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 15:54
par Iste
un peu trop violent le '(?s)(<div.*?span>)'

Êtes vous bien sur de récupérer le code source de la même manière que celle qui vous sert pour le traitement dans votre script ?
Car meme si c'est le meme code, suivant la façon de le récupérer il peut y avoir de fortes variation.

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 15:58
par mikell
Iste a écrit :un peu trop violent le '(?s)(<div.*?span>)'
Pas nécessairement, ça va surtout dépendre du reste de la page Image

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 16:37
par TopXm
Hello,
J'ai essayé en mettant le bout de code source dans un fichier et @Extended retourne 1 chez moi
► Afficher le texte

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 17:09
par Iste
TopXm a écrit :Hello,
J'ai essayé en mettant le bout de code source dans un fichier et @Extended retourne 1 chez moi
C'bien pour ca que j'ai demandé dès le début a vérifier le html qui passe dans le code.

Une fois sur deux, le probleme vient du fait qu'on teste les regexp sur des sources différentes de celles traitées par le script.

Donc sans info supplémentaire on ne pourra pas vous aider. Avec les infos données, ca marche, comme le montre le code de TopXm

Re: [..] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 17:30
par mikell
Oui, un moyen simple serait de faire un

Code : Tout sélectionner

FileWrite("debug.txt", $HTML)
après chargement pour vérifier l'allure du contenu ^^

@Iste
Pour avoir été récemment confronté au problème pour un certain script j'approuve chaudement :mrgreen:

Re: [R] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 18:56
par lesolutionneur
mikell a écrit :Oui, un moyen simple serait de faire un

Code : Tout sélectionner

FileWrite("debug.txt", $HTML)
après chargement pour vérifier l'allure du contenu ^^

@Iste
Pour avoir été récemment confronté au problème pour un certain script j'approuve chaudement :mrgreen:
C'est très drôle puisque c'est exactement ce que j'avais fait avant que vous ne le me dites ! (même nom de fichier !!)

Pour les autres,

Code : Tout sélectionner

$HTML = StringRegExpReplace($HTML, '(?s)(<div.*?span>)', '.')
ne donnera pas ce que je veux puisque je veux que ce soit supprimé uniquement si c'est "subject "
Comme d'hab, commencez pas un clipput($HTML) pour le coller ensuite dans scite.

Il y a de forte chance qu'elle ne contient pas ce que vous pensez !
Non, ne vous inquiétez pas, c'st le script qui récupérait la page et je faisais un filewrite pour voir le résultat.



Bon, je viens de restester sur mon ordinateur et, surprise ! Mes regex marchent parfaitement sans modification ! O_O

Je ne comprends pas; est-ce que ça veut dire que l'ordinateur du lycée a des problèmes mystiques ?

Merci à tous pour votre aide spontanée, je mets l sujet en résolu temporairement et je vous tiens au courant !


Ah oui, est-ce qu'il existe un UDF pour parser du html/xml ? Parce que les regex ne sont pas du tout adaptées pour parser du html !

Re: [R?] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 18:58
par Iste
Ben encore une foi, tout dépend de la façon dont vous récupérez le code source !
Si vous demandez a IE, et que ce n'est pas la même version d'un pc a l'autre, il peut en effet y avoir des différences.

Il faudrait récup le txt sur le pc qui marche pas, et le comparer avec celui qui marche.

Mais le mot "lycée" me fait dire qu'on a peut être un MITM qui pourrait y mettre son grain de sel !

PS : pas de "?" a coté du "R" dans votre titre svp

Re: [R?] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 23:10
par lesolutionneur
Le ? signifie que c'est ambigüe.

Pour le test, je vais essayer mais à ce moment là, ne serait-il pas plus judicier de récupérer la page en requête ? Dans ce cas, comment fais-je pour envoyer les cookies de IE (puisqu'il y a une connection) ? Pouvez-vous me donnez des exemples ?

Re: [R?] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 23:15
par Tlem
Un sujet est résolu ou ne l'est pas.
[R?] ne fait pas partie des balise de ce forum.

Re: [R?] Prise de tête avec les regex

Posté : jeu. 22 mars 2012 23:19
par Iste
Bien compris, mais comme dit plusieurs fois, si chacun invente ses propre balise on ne s'en sort plus.
Pour la liste, voir : http://autoitscript.fr/forum/viewtopic.php?f=35&t=595

Sinon, pour gerer les cookies "a la main", vous pouvez utiliser les objet httprequeste et remplir les remplir comme il faut.

Pas d'exemple sous la main dsl, mais ca doit se trouver !