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 :
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.
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
Mais il ne matchera que ce cas et pas les deux autres chaines de caractères
Maintenant si je fais
Je peux matcher les trois chaines de caractère.
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
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
Partager