Bonsoir.
Il y a quelques jours, j'ai posté deux petites fonctions qui permettent de vérifier la conformité d'une adresse IP, et extraire les adresses IP d'une chaîne de caractères (
http://autoitscript.fr/forum/viewtopic. ... 982#p80982)
Grâce à JCHD (que je remercie), j'ai découvert les sous-routines.
J'arrive à extraire et contrôler les adresses IP sans problème, mais ce que j'aimerais faire (que je n'ai pas réussi), c'est extraire les IP en utilisant les sous-routines (donc mon problème n'est pas technique, c'est un problème de compréhension

)
J'aimerais comprendre où je bute. Surement un problème de parenthèses, mais j'ai un peu tout essayé sans succès.
La fonction qui permet de contrôler une IP (avec sous-routine) fonctionne bien:
► Afficher le texte_IPv4_IsValid
Code : Tout sélectionner
Func _IPv4_IsValide($sIP)
$pattern = _
"(?x)" & _
"(?(DEFINE)" & _
" (?<withoutzero>" & _
" 25[0-5] | 2[0-4]\d | 1\d{2} | [1-9]\d | \d " & _
" )" & _
")" & _
"(?(DEFINE)" & _
" (?<withzero>" & _
" 25[0-5] | 2[0-4]\d | [0-1]\d{2} | (00)\d " & _
" )" & _
")" & _
"^" & _
"(((?&withoutzero)\.){3}(?&withoutzero)) | " & _
"(((?&withzero)\.){3}(?&withzero)) " & _
"$"
If StringRegExp($sIP, $pattern) Then Return 1
Return 0
EndFunc
La fonction d'extraction, que j'aimerais faire fonctionner avec les sous-routines :
► Afficher le texte_IPv4_Extract
Code : Tout sélectionner
Func _IPv4_Extract($sIP)
; en commentaire, le pattern d'orgine qui fonctionne
#CS
$pattern = "(?x) (?<!\d|\d\.) ( (?:(?: (?:(?:25[0-5] | 2[0-4]\d | 1\d{2} | [1-9]\d | \d )\.){3} (?:25[0-5] | 2[0-4]\d | 1\d{2} | [1-9]\d | \d ) ) " & _
" | " & _
"(?: (?:(?:25[0-5] | 2[0-4]\d | [0-1]\d{2} | (00)\d )\.){3} (?:25[0-5] | 2[0-4]\d | [0-1]\d{2} | (?:00)\d) )) ) (?!\d|\.\d)"
#CE
; et là, le pattern qui veut pas...
$pattern = _
"(?x)" & _
"(?(DEFINE)" & _
" (?<withoutzero>" & _
" 25[0-5] | 2[0-4]\d | 1\d{2} | [1-9]\d | \d " & _
" )" & _
")" & _
"(?(DEFINE)" & _
" (?<withzero>" & _
" 25[0-5] | 2[0-4]\d | [0-1]\d{2} | (00)\d " & _
" )" & _
")" & _
"^" & _
"( (?:(?:(?&withoutzero)\.){3}(?&withoutzero)) | " & _
"(?:(?:(?&withzero)\.){3}(?&withzero)) )" & _
"$"
Return StringRegExp($sIP, $pattern, 3)
EndFunc
Merci d'avance pour votre aide
Euh, j'ai été clair sur l'énoncé ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !