Bonjour,

Je me bat encore avec les regex.

J'aimerais récupérer la chaine de caractère qui match exactement ma regex.

Or je me retrouve avec un comportement bizarre du match de ma regex

Si je fais :

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Set RegularExpressionObject = New RegExp
 
dim Matches
dim ValeurChaineExpReg
 
dim strIso8859
dim strWin1252
dim strPourcent22
 
strIso8859 = "%22%22%22%22=?iso-8859-1?q?application%22%22%22%22/pdf"
strWin1252 = "urn:mimetype:handler:%22%22%22=?windows-1252?q?application%22%22%22/pdf"
strPourcent22 = "<RDF:Description RDF:about=" & chr(34) & "urn:mimetype:handler:%22=windows-application%22/pdf" & chr(34)
 
With RegularExpressionObject
   .Pattern = "(%22)*=windows-application(%22)*/pdf"
  .IgnoreCase = False
End With
 
MsgBox strIso8859
MsgBox RegularExpressionObject.Test(strIso8859)
Set Matches = RegularExpressionObject.Execute(strIso8859)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
 
MsgBox strWin1252
MsgBox RegularExpressionObject.Test(strWin1252)
Set Matches = RegularExpressionObject.Execute(strWin1252)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
 
MsgBox strPourcent22
MsgBox RegularExpressionObject.Test(strPourcent22)
Set Matches = RegularExpressionObject.Execute(strPourcent22)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
Dans ce cas pas de soucis il match correctement strPourcent22 et je peux récupérer la chaine de caractère "%22=windows-application%22/pdf" qui est la chaine que je souhaite remplacer sans soucis.

Mais il ne matchera que ce cas et pas les deux autres chaines de caractères

Maintenant si je fais

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Set RegularExpressionObject = New RegExp
 
dim Matches
dim ValeurChaineExpReg
 
dim strIso8859
dim strWin1252
dim strPourcent22
 
strIso8859 = "%22%22%22%22=?iso-8859-1?q?application%22%22%22%22/pdf"
strWin1252 = "urn:mimetype:handler:%22%22%22=?windows-1252?q?application%22%22%22/pdf"
strPourcent22 = "<RDF:Description RDF:about=" & chr(34) & "urn:mimetype:handler:%22=windows-application%22/pdf" & chr(34)
 
With RegularExpressionObject
' Modification du Pattern 
  .Pattern = "(%22)*[\w\W]*application(%22)*/pdf"
  .IgnoreCase = False
End With
 
MsgBox strIso8859
MsgBox RegularExpressionObject.Test(strIso8859)
Set Matches = RegularExpressionObject.Execute(strIso8859)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
 
MsgBox strWin1252
MsgBox RegularExpressionObject.Test(strWin1252)
Set Matches = RegularExpressionObject.Execute(strWin1252)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
 
MsgBox strPourcent22
MsgBox RegularExpressionObject.Test(strPourcent22)
Set Matches = RegularExpressionObject.Execute(strPourcent22)
for each match in Matches
	ValeurChaineExpReg = match.value
	MsgBox "chaine à remplacer :  " & ValeurChaineExpReg
next
Je peux matcher les trois chaines de caractère.
Par contre lorsque j'essaye d'afficher ValeurChaineExpReg il m'affiche toute la chaine de caractère et pas seulement la chaine de caractère matchant uniquement la regex.

En fait mon but serait de n'avoir qu'une seule expression régulière pour gérer correctement les chaines de caractère strIso8859, strWin1252, strPourcent22 et pour chacune d'elle récupérer la sous-chaine matchant correctement ma regex.

Pourquoi dans le premier cas je n'ai pas de soucis et dans le deuxième cas en utilisant [\w\W]* (= n'importe quel type de caractère 0 ou n fois), il ne me permet pas d'extraire la chaine exacte matchant ma regex????

Si qqn à une idée

Merci d'avance