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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

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

#1

Message 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é)
Modifié en dernier par lesolutionneur le ven. 23 mars 2012 10:57, modifié 2 fois.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#2

Message 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 !
Signez ici
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#3

Message par jchd »

Il doit manquer un (?m) en tête du pattern.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

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

#4

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#5

Message 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>)', '.')
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#6

Message par jchd »

Oooups j'avais regardé sans voir...
Je reprends donc mon (?m) et je me le remets dans ma poche.
:arrow:
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#7

Message 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.
Signez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#8

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Usa
Status : Hors ligne

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

#9

Message 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
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#10

Message 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
Signez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#11

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

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

#12

Message 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 !
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#13

Message 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
Signez ici
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

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

#14

Message 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 ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#15

Message par Tlem »

Un sujet est résolu ou ne l'est pas.
[R?] ne fait pas partie des balise de ce forum.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#16

Message 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 !
Signez ici
Répondre