[VBA] Expressions régulières => Quel pattern ?
Fermé
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
-
Modifié par lml-mike le 18/11/2013 à 11:27
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 nov. 2013 à 16:47
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 nov. 2013 à 16:47
A voir également:
- [VBA] Expressions régulières => Quel pattern ?
- Excel compter cellule couleur sans vba - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
- Vba range avec variable ✓ - Forum VB / VBA
3 réponses
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
Modifié par [Dal] le 18/11/2013 à 11:47
Modifié par [Dal] le 18/11/2013 à 11:47
Salut lml-mike,
Ta regexp
Comme l'indique pijaku, cependant, ton code ne fait visiblement pas ce que propose le tutoriel pour explorer les résultats de execute, qui utilise SubMatches(i) pour récupérer les résultats, dont le nombre est récupéré avec SubMatches.Count. Je ne pratique pas trop VBA, alors, vois la réponse de pijaku sur ce point.
Dans ton cas, s'il n'y a que le 2ème match qui t'intéresse, tu pourrais juste vérifier que SubMatches.Count renvoie bien 2, et aller directement chercher SubMatches(1).
Pour ta regexp
Dal
Ta regexp
(.*) \((.*)\)est bonne pour matcher en premier "douze travaux d'Astérix" et en 2ème "(les)" dans "douze travaux d'Astérix (les)".
Comme l'indique pijaku, cependant, ton code ne fait visiblement pas ce que propose le tutoriel pour explorer les résultats de execute, qui utilise SubMatches(i) pour récupérer les résultats, dont le nombre est récupéré avec SubMatches.Count. Je ne pratique pas trop VBA, alors, vois la réponse de pijaku sur ce point.
Dans ton cas, s'il n'y a que le 2ème match qui t'intéresse, tu pourrais juste vérifier que SubMatches.Count renvoie bien 2, et aller directement chercher SubMatches(1).
Pour ta regexp
(.*)\((http:\\\\.*)\), je pense que cela serait plutôt
(.*)\((http://.*)\), car ce sont des slashs qui suivent les : dans une URL et non des anti-slashes (à moins que tes URL ne soient bizarres).
Dal
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
18 nov. 2013 à 11:44
18 nov. 2013 à 11:44
Salut,
Si tu veux récupérer "douze travaux d'Astérix" et "les", il te faut boucler sur les SubMatches de tes Match.
Dans le tuto de Caféine :
Dans ton cas :
Si tu veux récupérer "douze travaux d'Astérix" et "les", il te faut boucler sur les SubMatches de tes Match.
Dans le tuto de Caféine :
Set Matches = reg.Execute(strSource)
For Each Match In Matches
Debug.Print "source >>", Match.Value
For i = 0 To Match.SubMatches.Count - 1
Debug.Print "[$" & i + 1 & "]", Match.SubMatches(i)
Next i
Next Match
Dans ton cas :
Set myMatches = reg.Execute(strSource)
For Each myMatch In myMatches
MsgBox myMatch.Value
For i = 0 To myMatch.SubMatches.Count - 1
ReDim Preserve monTab(indTab)
monTab(indTab) = myMatch.SubMatches(i)
MsgBox monTab(indTab)
indTab = indTab + 1
Next i
Next myMatch
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
121
18 nov. 2013 à 16:17
18 nov. 2013 à 16:17
Effectivement, le compteur comme indiqué fonctionne correctement, gros oubli de ma part :/
Mais, pour info, pourquoi - 1 ?
Mais, pour info, pourquoi - 1 ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
18 nov. 2013 à 16:47
18 nov. 2013 à 16:47
pourquoi - 1 ?
Simple question mathématiques.
Prenons ton exemple.
Tu as deux submatches, la n° 0 et la n°1.
Soit SubMatches.Count est égal à 2.
Comme nous voulons boucler sur les SubMatches, on initialise la boucle à 0. Comme nous commençons à 0 et qu'il nous faut 2 "tours" de boucle, et que SubMatches.Count = 2, il faut lui enlever 1......
Ok?
Simple question mathématiques.
Prenons ton exemple.
Tu as deux submatches, la n° 0 et la n°1.
Soit SubMatches.Count est égal à 2.
Comme nous voulons boucler sur les SubMatches, on initialise la boucle à 0. Comme nous commençons à 0 et qu'il nous faut 2 "tours" de boucle, et que SubMatches.Count = 2, il faut lui enlever 1......
Ok?
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
121
18 nov. 2013 à 16:18
18 nov. 2013 à 16:18
Tout fonctionne niquel, merci pour vos réponses rapides, et honte à moi pour mon manque de logique sur ce coup...
Passez une excellente après-midi !
Passez une excellente après-midi !
18 nov. 2013 à 16:18