Page 1 sur 1

[R] RegExp et subroutines

Posté : lun. 23 sept. 2013 21:28
par jguinch
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

La fonction d'extraction, que j'aimerais faire fonctionner avec les sous-routines :
► Afficher le texte_IPv4_Extract
Merci d'avance pour votre aide
Euh, j'ai été clair sur l'énoncé ?

Re: [..] RegExp et subroutines

Posté : lun. 23 sept. 2013 23:59
par mikell
Très clair :wink:
C'est marrant ces sous-routines
ça a l'air de marcher
► Afficher le texte
mais il me semble qu'il y a une erreur quelque part
► Afficher le texte

Re: [..] RegExp et subroutines

Posté : mar. 24 sept. 2013 01:04
par jchd
J'ai peut-être changé un peu le sujet de l'exercice, mais au pif, ça doit convenir :
► Afficher le texte

Re: [..] RegExp et subroutines

Posté : mar. 24 sept. 2013 09:59
par jguinch
Merci à vous deux.
@Mikell : oui, j'ai pas géré ce cas de figure, je m'en occuperai.
Par contre, dans ton code, tu as utilisé (?:, il me semble que c'est non-capturant. Pourquoi est-ce que la capture marche ?

@JC : ton code fonctionne également. Avec une petite modif, on obtient le résultat souhaité, mais comme pour le code de Mikell, je comprends pas pourquoi il y a besoin de faire cette modif :?

Code : Tout sélectionner

    $pattern = "(?x)(?(DEFINE)(?<withoutzero>   2[0-4]\d  |  25[0-5]  |  1\d{2}  |  [1-9]\d? ) ) " & _
                "(?(DEFINE)(?<withzero>   2[0-4]\d  |  25[0-5]  |  [0-1]?\d{1,2}) ) " & _
            "(?<=[^.\d])[b][color=#FF0000](?:[/color][/b](?:(?&withoutzero)(?:\.(?&withzero)){3}))(?=[^.\d])"
Bref...

Re: [R] RegExp et subroutines

Posté : mar. 24 sept. 2013 10:54
par jchd
Oops, c'est vrai, je t'ai laissé des niveaux de parenthèses complètement inutiles.

Code : Tout sélectionner

$pattern = "(?x)(?(DEFINE)(?<withoutzero>   2[0-4]\d  |  25[0-5]  |  1\d{2}  |  [1-9]\d? ) ) " & _
        "(?(DEFINE)(?<withzero>   2[0-4]\d  |  25[0-5]  |  [0-1]?\d{1,2}) ) " & _
        "(?<=[^.\d]) (?&withoutzero) (?:\.(?&withzero)){3} (?=[^.\d])"
 

Re: [R] RegExp et subroutines

Posté : mar. 24 sept. 2013 13:41
par jguinch
Ok, c'est mieux, merci.
En fait, je pensais que pour capturer des données, il fallait obligatoirement mettre des parenthèses... :roll:

Re: [R] RegExp et subroutines

Posté : mar. 24 sept. 2013 18:24
par jchd
La partie qui "match" est toujours disponible.