IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

RegExp Récupérer référence groupes de capture.


Sujet :

VBScript

  1. #1
    Invité
    Invité(e)
    Par défaut RegExp Récupérer référence groupes de capture.
    Bonjour,
    Ce code me permet de chercher si le TxtSource contient l’un des caractères contenue dans le pattern.
    Pour le remplacement je dois spécifier la position de mes groupes de capture manuellement "$7$12".
    J’aimerais récupérer ces groupes de capture automatiquement.
    J’ai essayé de jouer un peu avec une boucle sur les caractères de mon pattern et un appel match.Submatches(i), mais je ne m’en sort pas.
    Un petit coup de main SVP ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    TxtSource = "Un test? Pourquoi faire? c'est fou ça?"
    ReslutSpeciChars = ""	
     
    Dim strText, RegularExpressioN
     
    FindSpeciChars = "(\\)|(\/)|(\*)|(\+)|(\-)|(\=)|(\?)|(\!)|(\:)|(\;)|(\,)|(\')|(\&)|(\~)|(\{)|(\})|(\()|(\))|(\[)|(\])|(\@)|(\^)|(\¨)|(\$)|(\£)|(\€)|(\.)|(\<)|(\>)|(\|)" 
     
    	strText = TxtSource		
    	Set RegularExpressioN = New RegExp
    	RegularExpressioN.Pattern = FindSpeciChars
    	RegularExpressioN.Global = True
    	Set Matches = RegularExpressioN.Execute(strText)
    		If Matches.Count > 0 Then		  
    		    MatchMsg = Matches.Count & " correspondance(s) trouvée(s)." & vbCRLF
    		    	For Each Match In Matches
    		      		MatchMsg = MatchMsg & "Correspondance trouvée """ & Match.Value & """ en position: " & Match.FirstIndex & vbCrLf
    		    	Next
    		    'MsgBox MatchMsg
    		Else
    		    MsgBox "Aucun match", 0, "VBScript RegExp Tester"
    		End If		  										
    	strText = RegularExpressioN.Replace(strText, "$7$12")
    	Set RegularExpressioN = Nothing
    	ReslutSpeciChars = strText
     
    MsgBox TxtSource & vbCrLf & ReslutSpeciChars & vbCrLf & MatchMsg

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense avoir trouvé.

    Source: http://www.regular-expressions.info/vbscript.html

    You can specify an empty string as the replacement text. This will cause the Replace method to return the subject string will all regex matches deleted from it. To re-insert the regex match as part of the replacement, include $& in the replacement text. E.g. to enclose each regex match in the string between square brackets, specify [$&] as the replacement text. If the regexp contains capturing parentheses, you can use backreferences in the replacement text. $1 in the replacement text inserts the text matched by the first capturing group, $2 the second, etc. up to $9. To include a literal dollar sign in the replacements, put two consecutive dollar signs in the string you pass to the Replace method.
    Ça fonctionne, mais n'étant pas très à mon aise avec la langue de Shakespeare, pouvez-vous me confirmer que mon utilisation est correcte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    TxtSource = "Un test? Pourquoi faire? c'est fou ça?"
    ReslutSpeciChars = ""	
     
    Dim strText, RegularExpressioN
     
    FindSpeciChars = "(\\)|(\/)|(\*)|(\+)|(\-)|(\=)|(\?)|(\!)|(\:)|(\;)|(\,)|(\')|(\&)|(\~)|(\{)|(\})|(\()|(\))|(\[)|(\])|(\@)|(\^)|(\¨)|(\$)|(\£)|(\€)|(\.)|(\<)|(\>)|(\|)" 
     
    	strText = TxtSource		
    	Set RegularExpressioN = New RegExp
    	RegularExpressioN.Pattern = FindSpeciChars
    	RegularExpressioN.Global = True
    	Set Matches = RegularExpressioN.Execute(strText)
    		If Matches.Count > 0 Then		  
    		    MatchMsg = Matches.Count & " correspondance(s) trouvée(s)." & vbCRLF
    		    	For Each Match In Matches
    		      		MatchMsg = MatchMsg & "Correspondance trouvée """ & Match.Value & """ en position: " & Match.FirstIndex & vbCrLf
    		    	Next
    		    'MsgBox MatchMsg
    		Else
    		    MsgBox "Aucun match", 0, "VBScript RegExp Tester"
    		End If		  										
    	strText = RegularExpressioN.Replace(strText, "$&")
    	Set RegularExpressioN = Nothing
    	ReslutSpeciChars = strText
     
    MsgBox TxtSource & vbCrLf & ReslutSpeciChars & vbCrLf & MatchMsg

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Mais qu'est-ce que tu cherches à faire? Pourquoi avoir construit une alternative géante et avoir mis chaque caractère dans un groupe de capture différent?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'était qu'une étape qui ma conduit a créer une nouvelle discussion nommée::
    RegExp récupérer Submatches ?
    Dernière modification par ProgElecT ; 16/12/2017 à 09h22.

Discussions similaires

  1. [JavaScript] [RegExp] Nommez vos groupes capturants
    Par Lcf.vs dans le forum Contribuez
    Réponses: 3
    Dernier message: 27/02/2013, 10h41
  2. Récupérer le groupe d'un utilisateur par requête LDAP
    Par KrusK dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2008, 14h55
  3. Récupérer référence d'une popup ouverte précédemment
    Par Ougha dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/09/2007, 17h01
  4. RegExp: Récupérer une valeur en début de chaine
    Par pekka77 dans le forum Langage
    Réponses: 8
    Dernier message: 23/08/2006, 17h07
  5. Réponses: 8
    Dernier message: 02/11/2005, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo