|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Expressions régulières, regex, cherche et remplace |
Débuté par Gabriel H., 30 avr. 2008 16:19 - 11 réponses |
| |
| | | |
|
| |
Posté le 30 avril 2008 - 16:19 |
Bonjour,
Si comme moi vous avez voulu chercher ou remplacer une chaine de caractère qui vérifie une expression régulière facilement, vous avez du vous rendre compte que l'unique fonction de Windev VérifieExpressionRégulière() ne vous est pas d'une grande utilité...
L'astuce est d'utiliser un objet RegExp du VBScript.
Je vous fais donc part de ces deux fonctions, l'une pour chercher et l'autre pour remplacer. En espérant comme d'habitude que ça aidera au moins quelques développeurs windev !
----------------------------------------------------------
// Ne trouve que la première occurence correspondant à SearchPattern dans SourceString. // Possibilité de l'adapter très facilement pour trouver toutes les occurences.
PROCEDURE PG_RegEx_Find(pr_ch_SourceString est une chaîne, pr_ch_SearchPattern est une chaîne)
regEx est un objet Automation "VBScript.RegExp" ret est une chaîne CurrentMatch est un objet Automation dynamique CurrentMatches est un objet Automation dynamique
regEx>>Pattern = pr_ch_SearchPattern regEx>>IgnoreCase = True regEx>>Global = True regEx>>MultiLine = True CurrentMatches = regEx>>Execute(pr_ch_SourceString)
ret = "" IF CurrentMatches>>Count >= 1 THEN CurrentMatch = CurrentMatches>>item(0) IF CurrentMatch>>SubMatches>>Count >= 1 THEN ret = CurrentMatch>>SubMatches(0) END END RENVOYER ret
----------------------------------------------------------
// Remplace toutes les occurences trouvées par SearchPattern // dans SourceString par ReplacementString // et renvoie la chaine ainsi modifiée
PROCEDURE PG_RegEx_Replace(pr_ch_SourceString est une chaîne, pr_ch_SearchPattern est une chaîne, pr_ch_ReplacementString est une chaîne)
regEx est un objet Automation "VBScript.RegExp" retStr est une chaîne regEx>>Pattern = pr_ch_SearchPattern regEx>>IgnoreCase=True regEx>>Global = True regEx>>MultiLine = True RENVOYER regEx>>Replace(pr_ch_SourceString, pr_ch_ReplacementString) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 21 avril 2017 - 14:47 |
Coucou,
Vous avez une meilleur solution pour faire la même chose avec la Version 21 ?
Je sais , j détere les vieux dossier ... 2008
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 04 juin 2017 - 05:47 |
r
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust irc.freenode.net - ##pcsoft |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 04 juin 2017 - 05:49 |
Coucou,
Pkoi la regex valide sur https://regex101.com/ et pas en WLanguage !?
J ai besoin d'une regex qui valide un CSV ... Mais pkoi sa fonctionne pas ?
J'espere vraimment que c moi qui est pas compris un truc, car la pour le coup j suis vraimment bloqué .....
J'ai vraimment besoin d'une regex ... et de passer par VérifieExpressionRégulière
_sRegex est une chaîne = [ (?:^|,)(?=[^"]|(")?)"?((?(1)[^"]*|[^,"]*))"?(?=,|$) ] _sVerifie est une chaîne = "Toto,Tata,Titi,Leon"
SI VérifieExpressionRégulière(_sVerifie, _sRegex) ALORS Trace("ok") ELSE Trace("Pas ok") FIN
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust irc.freenode.net - ##pcsoft |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 04 juin 2017 - 16:55 |
hello, houla ton "pattern" d'expression régulière n'est pas des plus simples et cela ne m'étonne pas que VérifieExpressionRégulière n'arrive pas à le traiter car ce n'est pas le top. Même l'objet automation vbscript.regexp ne semble pas aimer non plus ton "pattern". Une soluton possible c'est d'utiliser le regexp de dotnet. Celui-ci se trouve dans l'assemblage System dans le namespace System.Text.RegularExpressions Voici un code à la louche pour traiter ton pattern austère :
_sRegex est une chaîne = [ (?:^|,)(?=[^"]|(")?)"?((?(1)[^"]*|[^,"]*))"?(?=,|$) ] _sVerifie est une chaîne = "Toto,Tata,Titi,Leon" x est un entier MesMatches est un MatchCollection dynamique = Regex.Matches(_sVerifie,_sRegex) // trace(MesMatches.count) POUR TOUT elem DE MesMatches Trace("full match : ",elem.value) x = 0 POUR TOUT groupe DE elem.groups Trace("Groupe ",x," : ", groupe.Value) x++ FIN FIN
voici le résultat :
le groupe 2 est peut-être ce que tu recherches. Au fait quel est le but exact de ton expression régulière ?
-- Ami calmant, J.PMessage modifié, 04 juin 2017 - 16:57 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 05 juin 2017 - 07:15 |
Coucou,
Super simpas de ta pars
Le but exact c de verifie que le format de la chaine est un CSV.
et ensuite j'utilise VérifieExpressionRégulière avec un tableau pour "split" les partie du CSV et acceder au different elements.
Je ferais un post plus tard pour expliquer ce que je suis entrain de finir comme program, sa pourais te faire marrer 2 minutes
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust irc.freenode.net - ##pcsoft |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 05 juin 2017 - 12:54 |
https://doc.pcsoft.fr/fr-FR/?3024032
Procedure PUBLIC VérifieExpressionRégulière(_sValue est une chaîne, _sPatern est une chaîne, _arrSMatchs est un tableau de chaîne = Null): boolean _pclMatchCollection est un MatchCollection dynamique = Regex.Matches(_sValue,_sPatern) POUR TOUT _Match de _pclMatchCollection Ajoute(_arrSMatchs, _Match.value) POUR TOUT _Groups de _Match.groups Ajoute(_arrSMatchs, _Groups.value) FIN FIN
RENVOYER (_pclMatchCollection.Count > 0)
SI VérifieExpressionRégulière(_sVerifie, _sRegex, _arrS) ALORS Trace("Match") SINON Trace("No Mach") FIN
Procedure PUBLIC VérifieExpressionRégulière(_sValue est une chaîne, _sPatern est une chaîne): boolean _pclMatchCollection est un MatchCollection dynamique = Regex.Matches(_sValue,_sPatern)
RENVOYER (_pclMatchCollection.Count > 0)
SI VérifieExpressionRégulière(_sVerifie, _sRegex) ALORS Trace("Match") SINON Trace("No Mach") FIN
Ami calmant
-- Charly CanDo. Forg en Nouvelle-Zélande / Indonesia - In üs we trust irc.freenode.net - ##pcsoftMessage modifié, 05 juin 2017 - 12:56 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 05 juin 2017 - 13:37 |
Désoler je sais pkoi j peut plus crée de nouveau sujet mais simplement y répondre .... Au cas ou j post en follow ici, et j envoie un mail, mais pareil j cumule les enuis ... (c pas normal :s)
Coucou,
Décidement ... sa doit etre le changement de pays c pas possible, j vais de problem en problem :s
Premier test je me connect sans certificat :
SocketConnecteSSL(_sGUID, 5222, "xmpp.jp", ProtocoleSSL3, 5000)
Vous avez appelé la fonction SocketConnecteSSL. Des erreurs de sécurité ont été détectées pendant la mise en place de la communication
----- Informations techniques -----
Projet : Primal
Appel WL : Traitement de 'Clic sur BTN_SansNom2' (FIWD_Abacradabra.FIWD_Abacradabra.BTN_SansNom2), ligne 13, thread 0 Fonction 'SocketConnecteSSL', syntaxe 2
Que s'est-il passé ? Des erreurs de sécurité ont été détectées pendant la mise en place de la communication
Code erreur : 101002 Niveau : erreur non fatale
Dump de l'erreur du module 'wd210com64.dll' (21.0.58.0). Identifiant des informations détaillées (.err) : 101002 Informations de débogage : ClientHandshakeLoop pxDecryptData Fonction (10,263) Informations supplémentaires : EIT_PILEWL : Clic sur BTN_SansNom2 (FIWD_Abacradabra.FIWD_Abacradabra.BTN_SansNom2), ligne 13 EIT_DATEHEURE : 05/06/2017 18:18:36 EIT_TYPE_WDFILE : <8> EIT_IDCODE : <18>
Deuxieme test je possé un certificat : (CertificatSélecteur() est patch pour la mise a jour de windows 10)
MonCertificat est un Certificat
MonCertificat = CertificatSélecteur()
SI MonCertificat..Nom = "" ALORS RETOUR FIN
SocketConnecteSSL(_sGUID, 5222, "160.16.217.191", ProtocoleSSL3, 5000, MonCertificat)
Erreur à la ligne 13 du traitement Clic sur BTN_SansNom2. Vous avez appelé la fonction SocketConnecteSSL. Des erreurs de sécurité ont été détectées pendant la mise en place de la communication
Détail de l'erreur système :
No credentials are available in the security package (2148074254)
----- Informations techniques -----
Projet : Primal
Appel WL : Traitement de 'Clic sur BTN_SansNom2' (FIWD_Abacradabra.FIWD_Abacradabra.BTN_SansNom2), ligne 13, thread 0 Fonction 'SocketConnecteSSL', syntaxe 3
Que s'est-il passé ? Des erreurs de sécurité ont été détectées pendant la mise en place de la communication
Code erreur : 101002 Niveau : erreur non fatale
Code d'erreur système : -2146893042 Message d'erreur système : No credentials are available in the security package
Dump de l'erreur du module 'wd210com64.dll' (21.0.58.0). Identifiant des informations détaillées (.err) : 101002 Informations de débogage : AcquireCredentialsHandle __bSetupCredentials bInitiateHandShake Fonction (10,263) Informations supplémentaires : EIT_PILEWL : Clic sur BTN_SansNom2 (FIWD_Abacradabra.FIWD_Abacradabra.BTN_SansNom2), ligne 13 EIT_DATEHEURE : 05/06/2017 18:27:21 EIT_TYPE_WDFILE : <8> EIT_IDCODE : <18>
https://www.google.com/transparencyreport/https/ct/#domain=www.xmpp.jp&incl_exp=False&incl_sub=False Et j'ai bien importer / verifié que le certificats et bon.
Ou alors j'ai pas compris ...
Merci d avance !
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust irc.freenode.net - ##pcsoft |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 129 messages Popularité : +20 (20 votes) |
|
Posté le 11 novembre 2020 - 14:28 |
Charly CANDO a écrit :
// Assemblage:System // Namespace:System.Text.RegularExpressions // Greatz to @JurassicPork Procedure PUBLICVérifieExpressionRégulière(_sValueest une chaîne,_sPaternest une chaîne,_arrSMatchsest un tableau de chaîne=Null):boolean _pclMatchCollectionest unMatchCollection dynamique=Regex.Matches(_sValue,_sPatern) POURTOUT_Matchde_pclMatchCollection Ajoute(_arrSMatchs,_Match.value) POURTOUT_Groupsde_Match.groups Ajoute(_arrSMatchs,_Groups.value) FIN FIN // Summary RENVOYER(_pclMatchCollection.Count>0) Bonjour,
Cette solution m'intéresse bcp, la fonction de base VérifieExpressionRégulière étant une plaie...
J'ai essayé d'intégrer l'assemblage .NET System.Text.RegularExpressions
je le voie bien dans le projet mais je n'arrive pas à le développer pour accéder à l'objet Regex
Suis à jour sur le framework .NET, j'arrive à accéder à d'autres composants, y a-t-il autre chose à faire ?
Merci pour vos réponses |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 283 messages Popularité : +80 (92 votes) |
|
Posté le 11 novembre 2020 - 15:40 |
Salut System.Text.RegularExpressions est un namespace de l'assemblage System, Pour pouvoir le manipuler tu dois inclures Sytem dans tes assemblages .Net Sélectionne System dans ta liste des assemblages .Net
-- Les innocents sont toujours accusés à tord. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 11 novembre 2020 - 15:40 |
hello, qu'as-tu importé comme assemblage ? quelle dll ? Parce que System.Text.RegularExpressions se trouve dans l'assemblage System
dans ta copie d'écran on ne voit pas System et toute son arborescence
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 129 messages Popularité : +20 (20 votes) |
|
Posté le 11 novembre 2020 - 20:32 |
Salut,
Effectivement j'avais importé la dll System.Text.RegularExpressions.dll et non System.dll
J'ai bien accès au Regex et ça fonctionne impeccable, merci !! |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|