PureBasic

Forums PureBasic
Nous sommes le Ven 22/Jan/2021 16:27

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: [OK]REGEX trouver lien de longueurs variables
MessagePosté: Mer 25/Nov/2020 0:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 9055
Bonjour,

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

Code:

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:
; 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 :. Tour + portable W10 x64 PB 5.6x / 5.7x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: REGEX trouver lien de longueurs variables
MessagePosté: Mer 25/Nov/2020 6:57 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
Citation:
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:
https?://[^ ]+

De plus, puisque l'expression se suffit à elle-même tu peux utiliser RegularExpressionMatchString(0)
Code:
; 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:
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:
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:
--- 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:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: REGEX trouver lien de longueurs variables
MessagePosté: Mer 25/Nov/2020 10:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 9055
Ah merci beaucoup !
Citation:
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:
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:
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 :. Tour + portable W10 x64 PB 5.6x / 5.7x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: REGEX trouver lien de longueurs variables
MessagePosté: Mer 25/Nov/2020 10:16 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
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:
https?://[^ \r\n]+
(= n'importe quel caractère sauf espace, retour chariot, saut de ligne)
\r = CR, \n = LF (comme en C)

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

:wink:


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 26 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye