[R] Pattern RegExp pour remplacer une macro

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[R] Pattern RegExp pour remplacer une macro

#1

Message par Tlem »

Ça faisait longtemps que je n'avais pas posé de question sur le forum. :roll:

Alors un petit 'challenge' plutôt simple pour ceux qui maitrise les expressions régulières (c'est pour répondre à un autre sujet ;) ).

Le but serait de trouver un pattern pour la fonction RegExpReplace, afin de remplacer dans une chaine de caractère la manière dont est écrit une macro.

Je souhaiterais remplacer @MaMacro par @@MaMacro@ tout en sachant que le texte "MaMacro" n'est pas fixe (puisqu'il y à tout un tas de macro possible) et que le caractère qui précède ou celui qui suit cette macro peut être un caractère de séparation classique tel que l'espace, les guillemets (simple ou double), l'antislash (ou le slash), la virgule, etc ...
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: [..] Pattern RegExp pour remplacer une macro

#2

Message par Iste »

La question est plutot de savoir ce qu'il y a dans le mot, plutot que autour

Comme ca, je proposerai

Code : Tout sélectionner

StringRegExpReplace($text, "(@[A-za-z0-9]+)", "@$0")
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: [..] Pattern RegExp pour remplacer une macro

#3

Message par jchd »

Au pif :

Code : Tout sélectionner

StringRegExpReplace($text, "(@[\w]+)", "@$0@")
(\w inclut _)
Maintenant quel est le sous-ensemble réel de caractères admis dans le nom d'une macro ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Pattern RegExp pour remplacer une macro

#4

Message par sylvanie »

En admettant qu'un espace ne peut pas appartenir au nom de la macro :

Code : Tout sélectionner

StringRegExpReplace($text, "(@[^\s]+)", "@$0@")
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Pattern RegExp pour remplacer une macro

#5

Message par Tlem »

Les macros sont toutes celle que l'on trouve pour AutoIt : http://www.autoitscript.fr/autoit3/docs/macros.htm

Par contre les caractères de séparation ne peuvent être que des caractères reconnu par AutoIt en tant que séparation ou encadrement.

Je fait un script de test avec un max de possibilité et je test vos propositions. ;)

Merci les gars.
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
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Pattern RegExp pour remplacer une macro

#6

Message par bloodwolff »

En voyant les maccros et les caractères de séparation cité dans le premier message je choisirais le pattern de jchd car c'est le plus restrictif

Code : Tout sélectionner

StringRegExpReplace($text, "(@[\w]+)", "@$0@")
Qui peut être réduit à

Code : Tout sélectionner

StringRegExpReplace($text, "@\w+", "@$0@")
Mais on s'en fou ^^ Dans le cas présent, aucunes des maccro ne contient de chiffres donc j'irais encore plus restrictif

Code : Tout sélectionner

StringRegExpReplace($text, "@[A-z_]+", "@$0@")
Mais si tu veux être encore plus restrictif tu peux regarder du coté de leur longueur , si je ne me suis pas trompé la plus courte est de 2 et la plus longue de 18.

Code : Tout sélectionner

StringRegExpReplace($text, "@[A-z_]{2,18}", "@$0@")
Ps: Les caractères de séparations ( ,"'...)sont inutiles sur le texte d'entré puisque la simple présence d'un @ au début de chaque maccro permet de les séparer
Compte skype : bloodwolfff
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: [..] Pattern RegExp pour remplacer une macro

#7

Message par jchd »

Certes j'ai laissé bêtement les [], mais j'objecte au reste :

Code : Tout sélectionner

Local $s = "et voici la macro qui tue (@Mac[j`te_nique^]ro) et sa suite"
ConsoleWrite(StringRegExpReplace($s, "@[A-z_]{2,18}", "@$0@") & @LF)
Qui plus est, les chiffres sont autorisés dans une macro et quant à la limitation à 2..18, si elle est valable aujourd'hui, risque d'être un souci demain (la version 3.3.8 sort très bientôt).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Pattern RegExp pour remplacer une macro

#8

Message par Tlem »

Merci beaucoup, j'avais opté de toute façon pour la première version de Jean Claude.
Voici à quoi cela à servit : http://www.autoitscript.fr/forum/viewto ... 689#p58689
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
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Pattern RegExp pour remplacer une macro

#9

Message par bloodwolff »

Dans ce cas

Code : Tout sélectionner

Local $s = "et voici la macro qui tue (@Mac[j`te_nique^]ro) et sa suite"
ConsoleWrite(StringRegExpReplace($s, "@[[:alpha:]_]{2,18}", "@$0@") & @LF)
Fonctionne et t'inquiète jchd j'avais justement inclus ta macro parce qu'elle était adapté , j'ai simplement rajouté des alternatives si jmaias il voulait être plus restrictif

De toute façons c'est un sujet clos vu le [R] du premier message
Compte skype : bloodwolfff
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] Pattern RegExp pour remplacer une macro

#10

Message par Tlem »

Suite à ce qu'à dit Jean-Claude, je pense qu'il faut considérer la macro comme étant une chaine commencent par un seul symbole @ puis étant composée de caractère alphanumérique, nombre ou symbole underscore. La fin du nom de la macro doit être exclusivement déterminé par tout autres symboles (Espace, guillemet simple ou double, virgule, slash, antislash et &, etc ...).

A première vue la proposition de Jean-ClaudeChristophe valide ces conditions.
Modifié en dernier par zeshrek le jeu. 24 nov. 2011 14:05, modifié 1 fois.
Raison : L'ogre vert se prend pour un interpreteur de RegExp...
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
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: [R] Pattern RegExp pour remplacer une macro

#11

Message par jchd »

Par pitié :

Code : Tout sélectionner

$text = StringRegExpReplace($text, "(?im)jean[\s-]claude", "Jean-Christophe")
Ah oui, au fait pour bloodwolff et juste pour info : [:alpha:] équivaut à seulement (?i)a-z donc sans \d_

Par contre, \w [:alpha:] et plein d'autres ont une sémantique dépendante du support UCP (Unicode Character Properties). Pour l'instant, AutoIt emploie une version de PCRE compilée sans support UCP, ce qui fait que seuls les caractères 0..127 sont catégoriés.
Il est cependant tout à fait possible que, pour répondre aux besoins d'usagers toujours plus nombreux aux quatre coins de la planète, une version ultérieure comporte ce support. Du coup, tout ce qui est "lettre" au sens Unicode matchera \w et frères si l'option *UCP est employée.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
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] Pattern RegExp pour remplacer une macro

#12

Message par Tlem »

Désolé et merci $text. :mrgreen:
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é".
Répondre