Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
784 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Aide sur une regex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide sur une regex

n°2311503
NostalGeek​ette
Posté le 22-02-2018 à 20:39:03  profilanswer
 

Bonjour,
 
Je ne sais pas si je suis au bon endroit, je m'en excuse par avance, je ne sais pas trop où poster ça.  :jap:  
 
Pour en venir à ma demande :
Voici ce que je veux matcher avec la regex :
 
dont want {dont want 'want this', 'want this, je m\'appelle Robert', dont want}
'dont want'
 
Du coup, les chaînes de caractères qui sont entre simple quotes, uniquement dans des accolades. Je veux aussi gérer les "escape" pour pouvoir mettre des phrases avec des apostrophes.
J'ai trouvé une regex qui match les quotes et gère les escape, et une autre qui gère les accolades mais pas les escape, et je ne m'en sors pas.  :sweat:  
Les deux regex trouvées :
 
quotes dans les accolades sans escape
'[^']*'(?=[^{']*('[^']*'[^'{]*)*\})
 
quotes seules avec escape
\'([^\'\\]*(\\.[^\'\\]*)*)\'
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 22-02-2018 à 20:39:03  profilanswer
 

n°2311552
sielfried
Posté le 23-02-2018 à 19:56:54  profilanswer
 

Hello,
 
Est-ce indispensable de faire ça en une seule regex ?
 
Sinon, je te suggère de d'abord récupérer ce qui se trouve entre accolades :

(?<!\\){(.*?)(?<!\\)}

https://regex101.com/r/vC5e2H/2/
 
Ensuite pour chaque match, tu récupères ce qu'il y a entre quotes :

(?<!\\)'(.*?)(?<!\\)'

https://regex101.com/r/sVlj8L/1


Message édité par sielfried le 23-02-2018 à 19:57:20

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°2311555
MaybeEijOr​Not
but someone at least
Posté le 23-02-2018 à 22:56:47  profilanswer
 

Salut,
 
Je suggère de même de découper en plusieurs étapes, sinon voilà un résultat pas trop mal :

Code :
  1. /'([^'}{\\]*(?:\\')?[^'}{\\]*)'(?=(?:[^'}{\\]*(?:'[^'}{\\]*(?:\\')?[^'}{\\]*'?)?[^'}{\\]*)\})/gm


https://regex101.com/r/ZjI04C/2
 [:psywalk]  
Évidemment mon regex ne prend pas en compte les imbrications.

Message cité 1 fois
Message édité par MaybeEijOrNot le 23-02-2018 à 23:00:37

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2311558
sielfried
Posté le 24-02-2018 à 01:53:44  profilanswer
 

MaybeEijOrNot a écrit :

Salut,
 
Je suggère de même de découper en plusieurs étapes, sinon voilà un résultat pas trop mal :

Code :
  1. /'([^'}{\\]*(?:\\')?[^'}{\\]*)'(?=(?:[^'}{\\]*(?:'[^'}{\\]*(?:\\')?[^'}{\\]*'?)?[^'}{\\]*)\})/gm


https://regex101.com/r/ZjI04C/2
 [:psywalk]  
Évidemment mon regex ne prend pas en compte les imbrications.


 
Pas mal, par contre ça a le ptit inconvénient de capturer aussi les parties de texte sans accolade ouvrantes, type

'truc' } 'machin' }


Message édité par sielfried le 24-02-2018 à 01:55:05

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°2311561
MaybeEijOr​Not
but someone at least
Posté le 24-02-2018 à 10:50:05  profilanswer
 

Oui, on voit bien que j'ai supposé que si on ferme une accolade c'est qu'une avait été ouverte avant, et tout comme ça ne gère pas les imbrications, il faut une chaîne un tant soit peu formatée. Il doit y avoir d'autres bugs, comme par exemple l'introduction d'accolades dans les parties à capturer mais bon ça rejoint en partie l'imbrication.

 

Mais c'est pour ça que comme toi je conseille de faire en plusieurs étapes si on veut vraiment quelque chose de propre. De toute façon je ne vois aucun intérêt de faire en une seule étape, ce n'est pas moins gourmand en performances. Au contraire, en général, ça l'est bien plus, les étapes permettent d'optimiser le nombre de vérifications.


Message édité par MaybeEijOrNot le 24-02-2018 à 10:50:32

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Aide sur une regex

 

Sujets relatifs
Aide sur une REGEX C# svpaide regex svp
Aide pour une Regex[C#] aide sur un regex.
Bash/Shellscript, aide regex/sed/trRecuperer l'id de session php a l'aide d'un regex
[RegEx] Aide pour regexp (commence par ... et ne finit pas par ...)Aide Expressions Régulières (Urgent)
demande aide pour regex pas facileaide REGEX
Plus de sujets relatifs à : Aide sur une regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR