[OK]REGEX trouver lien de longueurs variables

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

[OK]REGEX trouver lien de longueurs variables

Message par Ar-S »

Bonjour,

J'aimerai savoir comment faire une expression régulière permettant de chopper les liens 1 3 4 et 5 suivants :

Code : Tout sélectionner


1 https://trucfix/randomjekjen  *MARKEUR*
2 https://pasbonlien/qsdqsd *MARKEUR*
3 http://trucfix/raSD4zje/4646.ccn  *MARKEUR*
4 https://trucfix/raSD4zje/4646.ccn  *MARKEUR*
5 prout https://trucfix/raSD4zje/4644z55z5z-454.dqq.c0n  *MARKEUR*

Avec ce code je chope le début des liens (enfin 3/4) mais je n'ai aucune idée de comment on detecte N caractères jusqu'au marqueur.
D'ailleurs à la base le marqueur est le #CRLF$ mais je me dis que je le remplacerai via un replacestring vu que je ne sais même pas si on peut entrer ce caractère en regex.
Bref, aux amateurs de Regex, HELP. (Marc56 si tu me lis :) )

Code : Tout sélectionner

; copiez le texte dans le presse papier
t$ = GetClipboardText()

If CreateRegularExpression(0,"(http://trucfix/|https://trucfix/)", #PB_RegularExpression_DotAll)
    If ExamineRegularExpression(0, T$)
        While NextRegularExpressionMatch(0)
             Debug RegularExpressionGroup(0,1)
        Wend
      EndIf
      FreeRegularExpression(0)
    Else
      Debug "Regex non init"
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: REGEX trouver lien de longueurs variables

Message par Marc56 »

Bref, aux amateurs de Regex, HELP. (Marc56 si tu me lis :) )
Oui, je lis, les vieux ça se lève tôt :mrgreen: et une RegEx au p'tit déj' ça réveille les neurones :D

Sachant qu'une URL ne contient pas d'espace, c'est simple, on écrit de gauche à droit

1. http :arrow: http
2. éventuellement un s :arrow: s?
3. quelques caractères fixes (facultatif, mais peut limiter un éventuel texte parasite) :arrow: ://
4. tout sauf un espace :arrow: [^ ]+
(On peut serrer un peu plus en limitant 4. aux caractères autorisés [a-z0-1_.-&#]+ (et j'en oublie))

Code : Tout sélectionner

https?://[^ ]+
De plus, puisque l'expression se suffit à elle-même tu peux utiliser RegularExpressionMatchString(0)

Code : Tout sélectionner

; copiez le texte dans le presse papier
t$ = GetClipboardText()

If CreateRegularExpression(0,"https?://[^ ]+", #PB_RegularExpression_DotAll)
    If ExamineRegularExpression(0, T$)
        While NextRegularExpressionMatch(0)
            Debug RegularExpressionMatchString(0)
        Wend
    EndIf
    FreeRegularExpression(0)
Else
    Debug "Regex non init"
EndIf

Code : Tout sélectionner

https://trucfix/randomjekjen
https://pasbonlien/qsdqsd
http://trucfix/raSD4zje/4646.ccn
https://trucfix/raSD4zje/4646.ccn
https://trucfix/raSD4zje/4644z55z5z-454.dqq.c0n
Pas de soucis pour les sauts de ligne puisque #PB_RegularExpression_DotAll les prends aussi.



:idea:
PS.
Pour les allergiques aux RegEx, une version FindString

Code : Tout sélectionner

t$ = "1 https://trucfix/randomjekjen  *MARKEUR*" +
     "2 https://pasbonlien/qsdqsd *MARKEUR*" +
     "3 http://trucfix/raSD4zje/4646.ccn  *MARKEUR*" +
     "4 https://trucfix/raSD4zje/4646.ccn  *MARKEUR*" +
     "5 prout https://trucfix/raSD4zje/4644z55z5z-454.dqq.c0n  *MARKEUR*" 

Debug "--- HTTPS"
Repeat
    STX = FindString(t$, "https://", ETX)
    If STX = 0 : Break : EndIf
    ETX = FindString(t$, " ", STX)    
    Debug Mid(t$, STX, ETX-STX)
ForEver

Debug "--- HTTP"
ETX = 0
Repeat
    STX = FindString(t$, "http://", ETX)
    If STX = 0 : Break : EndIf
    ETX = FindString(t$, " ", STX)    
    Debug Mid(t$, STX, ETX-STX)
ForEver

Code : Tout sélectionner

--- HTTPS
https://trucfix/randomjekjen
https://pasbonlien/qsdqsd
https://trucfix/raSD4zje/4646.ccn
https://trucfix/raSD4zje/4644z55z5z-454.dqq.c0n
--- HTTP
http://trucfix/raSD4zje/4646.ccn
:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: REGEX trouver lien de longueurs variables

Message par Ar-S »

Ah merci beaucoup !
4. tout sauf un espace :arrow: [^ ]+
C'est là que j'ai du faire une petite modif. Comme mon "copier" peut inclure une liste d'URL, il ni a pas forcement d'espaces après celle ci mais un #CRLF$ (ou parfois un espace)
J'ai donc parsé mon contenu comme ceci avant d'appliquer la regex.

Code : Tout sélectionner

t$ = GetClipboardText()
t$ = ReplaceString(t$," ","*")
t$ = ReplaceString(t$,#CRLF$,"*")
; puis la regex
If CreateRegularExpression(0,"https?://trucfix/[^*]+", #PB_RegularExpression_DotAll)
ça marche au poil.

note :
J'ai bien essayé de transposer dans la regex avec :

Code : Tout sélectionner

If CreateRegularExpression(0,"https?://trucfix/[^ ]|+[^#CRLF$]", #PB_RegularExpression_DotAll)
mais ça prenait pas juste l'url, sûrement un soucis de syntaxe de ma part.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: REGEX trouver lien de longueurs variables

Message par Marc56 »

Ar-S a écrit :... il n'y a pas forcement d'espaces après celle ci mais un #CRLF$ (ou parfois un espace)
Tu peux même éviter l'étape du ReplaceString() en ajoutant CR et LF à l'espace comme séparateur de chaine.
[^ ] = inverse la liste des caractères (à noter que . dans [] signifie alors . et pas n'importe quel caractère)

Code : Tout sélectionner

https?://[^ \r\n]+
(= n'importe quel caractère sauf espace, retour chariot, saut de ligne)
\r = CR, \n = LF (comme en C)

ou

Code : Tout sélectionner

https?://[^\s\r\n]+
\s = Space (espace ou tab)

:wink:
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: [OK]REGEX trouver lien de longueurs variables

Message par Naheulf »

Il y a des sites qui peuvent aider pour développer/tester les regex. l'avantage c'est qu'ils donnent des informations auxquelles on ne pense pas forcement. Par exemple :
regex101.com a écrit :[\s] matches any whitespace character (equal to [\r\n\t\f\v ])
Ce qui permet de simplifier la regex en :

Code : Tout sélectionner

https?://[^\s]+
Répondre