Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/12/2012, 15h51   #1
Picsonald
Invité de passage
 
Homme
Développeur .NET
Inscription : décembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 15
Points : 3
Points : 3
Par défaut Détecter un conflit entre deux expressions régulières

Bonjour à tous,

Après des recherches sur votre forum et ailleurs, je reste bloqué devant un défi technique : je n'arrive pas à détecter un conflit entre deux expressions régulières. Illustration (schématique) :

Les expressions régulières ont la syntaxe de « filtres » de fichiers Windows.

Voici un nom de fichier : « ALIB.TXT »

Et trois expressions régulières, et le résultat qu'elles renvoient (Match) :
  • Expression 1 : « A*B.TXT » = OUI
  • Expression 2 : « AL*.TXT » = OUI
  • Expression 3 : « B*.TXT » = NON

Conclusion :
  • Les expressions 1 & 2 peuvent être en conflit
  • Les expressions 1 & 3, et 2 & 3 ne peuvent jamais être en conflit (impossible)

La question à laquelle je ne trouve pas de réponse est... :
Comment faire pour détecter que les expressions 1 & 2 peuvent être en conflit ?

Je code en C#, et j'ai besoin de coder une méthode qui ressemblerait à
Code :
1
2
3
4
5
bool IsConflitualRegex(string expr1, string expr2)
{
  // Code difficile à écrire
  // return true ou false;
}
Est-ce que l'un d'entre vous aurait des pistes à me soumettre ?

Merci d'avance,

Picsonald.
Picsonald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 12h24   #2
mokfajri
Membre à l'essai
 
Homme
Développeur Web
Inscription : avril 2009
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2009
Messages : 19
Points : 24
Points : 24
Je crois que c'est un problème assez difficile pour être codé dans une fonction, car si je comprends bien, tu cherche un moyen qui permet de dire que deux Regex sont équivalentes (Dans le monde des Maths cela revient à trouvé un invariant).
Voilà un lien où on parle de ce problème
http://fr.softuses.com/73604
mokfajri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 15h38   #3
Picsonald
Invité de passage
 
Homme
Développeur .NET
Inscription : décembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 15
Points : 3
Points : 3
Merci pour ta réponse !

En effet, ton lien m'a mené vers les liens suivants :
Je ne connaissais pas du tout ces notions mathématiques autour des expressions régulières. Une piste pour moi sera de déterminer le DFA minimal de mes regex, pour ensuite les comparer... Sachant qu'en plus, en C#, on a un moteur NFA.

Je crois bien que c'est trop dur pour moi. Je vais abandonner le développement de cette méthode.

Merci pour ton aide, mokfajri.
Picsonald est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h25.


 
 
 
 
Partenaires

Hébergement Web