Problème avec mon expression régulière [Résolu]

Signaler
Messages postés
47
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
25 février 2010
-
Messages postés
10
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
11 octobre 2008
-
Bon...ce message est un problème de vbScript mais il n'y a pas de catégorie....

Voilà mon soucis.
J'utilise l'objet VBScript_RegExp_55.RegExp pour retrouver des valeur dans un text. Voici le format du text :
xxxxx: text à retrouver
yyyyy: autre text
zzzzzz: encore un
aaaaaaa:
voilà le text que je n'arrive pas à retrouver
car il contient des retour à la ligne
Fin
mon but, c'est de récupérer le text donc avec reg.Pattern CeQueJeVeuxRetrouver & ": (.*)\r" Si CeQueJeVeuxRetrouver  "xxxxx", ca me renvoie text à retrouver etc....Le problème, c'est pour le "aaaaaaa" en effet, le caractère . représente tous les caractère sauf \r or le champs commence par un \r. Comment dois-je faire ??? je pensais faire qqch comme ça :  reg.Pattern = CeQueJeVeuxRetrouver & ": (.*)Fin" mais forcément, vu que le . représente tous sauf \r ça ne fonctionne pas...

Merci pour votre aide

White_Mage();

12 réponses

Messages postés
47
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
25 février 2010

^(\w+):\s*([^:]+)\s+$  ne fonctionne pas mais c'est pas grâve car j'ai trouvé comment faire (c'est un peu de la bidouille mais bon)

En faisant un :
   text = Replace(text, Chr(10), " "),  le caratère chr(13) se retrouve tout seul.        
Le caractère Chr(13) n'est pas considéré comme un retour à la ligne... donc après, on remet le caractère Chr(10) et c'est bon...

White_Mage();
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Set oReg = CreateObject("....
oReg.Pattern = "...."
oReg.Multiline = True


tu peux utiliser :
http://www.vbfrance.com/codes/REGEXP-WORKSHOP_17331.aspx

pour tester ta regexp.

nb. il existe bien une section propre au VBS ^^
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour à tous,

Bonjour Renfield,

il faut protéger le \en le doublant.


ex:
Option Explicit
Const Texte = "00:08:17 S: DS \ rOOUT OT *;"
Const sChaine = "DS \\rOOUT"   'chaine recherchée
Dim resultatIf RegExpTest(sChaine, Texte) True Then resultat resultat &vbcrlf
'If RegExpTest(sChaine, Texte) = False Then msgbox "expression non trouvée...false"
MsgBox resultat,,"resultat"

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches, RetStr   ' Crée la variable.
   Set regEx = New RegExp   ' Crée une expression régulière.
   regEx.Pattern = patrn   ' Définit les critères.
   regEx.IgnoreCase = True 'True   ' Ignore la casse.
   regEx.Global = False   ' Définit une application globale.
   Set Matches = regEx.Execute(strng)   ' Lance la recherche.
   For Each Match in Matches   ' Itère la collection Matches.
   resultat = "OK TROUVE"
       RegExpTest = True : Exit Function
   Next
   resultat = "NOK PAS TROUVE"
   RegExpTest = False
End Function

Thème vbs: [infomsg.aspx Thèmes]

/ [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBSCRIPT_245.aspx VBScript]

jean-marc
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
'lut JMO

pas d'accord avec ton "\\r" on ne cherche pas la chaine \r proprement dite...
\r symbolise le saut de ligne...

j'utiliserai par exemple la regexp suivante:

^(\w+):\s*([^:]+)\s+$

en utilisant :

regEx.IgnoreCase = True
regEx.MultiLine = True
regEx.Global= True

ca découpe les chaines {clé}: {valeur}

même si la valeur est sur plusieurs lignes...
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Re,

Autant pour moi, Renfield, visu de la doc avec
\s qui correspond à tout espace blanc, y compris l'espace, la tabulation, le saut de
page, etc.
Équivaut à "[ \f\n\r\t\v]".
Par contre, d'après la doc, le multiline existe en JScript mais n'est pas référencé en vbs. A confirmer.

jean-marc
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
en vbs je sais pas, j'utilise le même objet depuis VB6 (VbScript RegExp)
donc a priori, ca devrait rouler en VBS...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
47
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
25 février 2010

En tout cas, merci pour votre aide !

White_Mage();
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ca aurait du fonctionner, as tu bien configurer le MultiLine ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
47
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
25 février 2010

Oui...le multiline était configuré...
Je n'ai plus trop le temps de tester mais je le ferai à l'occase

Merci pour ton aide....et a+
White_Mage();
Messages postés
47
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
25 février 2010

okay....je vois ou j'ai fais l'erreur !!!

merci .....

White_Mage();
Messages postés
19
Date d'inscription
mercredi 19 mai 2004
Statut
Membre
Dernière intervention
15 février 2008

Moi je dis c'est pas bien les solutions genre tu fais un replace(...)... Et ça aidera pas les gens en galère dans d'autres situations plus particulières... Enfin c'est gentil quand même d'aider les gens et de tenter de trouver des alternatives...

Bon le vrai problème est de savoir si il est possible en VBSCRIPT et non en VB de gérer le multiline au sein des expressions régulières :

Voilà la réponse : souvent les moteurs de regexp ont été écrits pour traiter des lignes seules, et la plupart des languages ont été améliorés pour gérer le cas du multiligne. Pour le VB en général, le caractère . remplace par défaut n'importe quel caractère sauf le \n, il est équivalent à [^\n]. En VB pour modifier ce comportement, il existe la propriété multiline qui active le mutiligne et remplace le comportement de . mais je précise que VBScript n'implémente pas cette propriété.

Si on réfléchis, \s remplace n'importe quel caratère blanc dont \n, d'autre part, \S représente tous les autres caractères qui sont pas \s.
Donc pour représenter n'importe quel caractère possible en VBSCRIPT, on peut écrire [\s\S]

La voilà la vraie réponse.













Dj Nos :-)

...To bot insurection...
Messages postés
10
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
11 octobre 2008

Bonjour a tous,



je saisi un NOm dans une variable d'un inputbox dans le but de verifier si ce Nom existe ou pas dans ma table or, si je saisi en minuscule et que dans ma base le nom existe mais en majuscule le code me renvoi " Nom inexistant" voila j aimerai connaitre le code qui ignorera la casse dans un inputbox

merci de m'aider

Philippe42