Problème avec mon expression régulière

Résolu
white_mage Messages postés 47 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 25 février 2010 - 11 déc. 2007 à 09:24
philippeR42 Messages postés 10 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 11 octobre 2008 - 18 août 2008 à 18:17
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

white_mage Messages postés 47 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 25 février 2010
14 déc. 2007 à 09:55
^(\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();
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 déc. 2007 à 11:31
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 ^^
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
11 déc. 2007 à 13:25
 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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 déc. 2007 à 14:26
'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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
11 déc. 2007 à 17:23
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 déc. 2007 à 20:29
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
0
white_mage Messages postés 47 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 25 février 2010
14 déc. 2007 à 09:56
En tout cas, merci pour votre aide !

White_Mage();
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 déc. 2007 à 21:34
ca aurait du fonctionner, as tu bien configurer le MultiLine ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
white_mage Messages postés 47 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 25 février 2010
18 déc. 2007 à 17:24
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();
0
white_mage Messages postés 47 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 25 février 2010
18 déc. 2007 à 17:24
okay....je vois ou j'ai fais l'erreur !!!

merci .....

White_Mage();
0
djnos Messages postés 19 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 15 février 2008
15 févr. 2008 à 15:49
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...
0
philippeR42 Messages postés 10 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 11 octobre 2008
18 août 2008 à 18:17
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
0
Rejoignez-nous