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

 

  1. #1
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 156
    Points : 80
    Points
    80

    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
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 156
    Points : 80
    Points
    80

    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
    Membre émérite Avatar de CosmoKnacki
    Homme Profil pro
    Inscrit en
    mars 2009
    Messages
    1 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 1 210
    Points : 2 289
    Points
    2 289

    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?
    "Ça s'laisse boire!" - Bérénice du Syphon

  4. #4
    Membre régulier
    Homme Profil pro
    Tech maintenance Info
    Inscrit en
    août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Tech maintenance Info
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2009
    Messages : 156
    Points : 80
    Points
    80

    Par défaut

    C'était qu'une étape qui ma conduit a créer une nouvelle discussion nommée::
    RegExp récupérer Submatches ?

Discussions similaires

  1. [JavaScript] [RegExp] Nommez vos groupes capturants
    Par Lcf.vs dans le forum Contribuez
    Réponses: 3
    Dernier message: 27/02/2013, 09h41
  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, 13h55
  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, 16h01
  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, 16h07
  5. Réponses: 8
    Dernier message: 02/11/2005, 14h16

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