XXP

octobre 2011

lun. mar. mer. jeu. ven. sam. dim.
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

« Les expressions régulières sont illisibles... | Accueil | Les expressions régulières sont illisibles... »

30 juin 2008

Les expressions régulières sont illisibles...

... donc rendons les lisibles, maintenables et vérifiables à la compilation.

C'est ce qui a motivé Joshua Flanagan pour développer une API qui encapsule la syntaxe très particulière des expressions régulières.

Eu_timestamp_regex_2
Expression régulière pour identifier les dates européennes. Bah si.

ReadableRex, c'est le nom de l'API .Net open-source, simplifie radicalement la manipulation des expressions régulières.

Avec ReadableRex, ceci :

const string findGamesPattern = @"<div\s*class=""game""\s*id=""(?<gameID>\d+)-game""(?<content>.*?)<!--gameStatus\s*=\s*(?<gameState>\d+)-->"; 

devient cela :

 

Pattern findGamesPattern = Pattern.With.Literal(@"<div")

        .WhiteSpace.Repeat.ZeroOrMore

        .Literal(@"class=""game""").WhiteSpace.Repeat.ZeroOrMore.Literal(@"id=""")

        .NamedGroup("gameId", Pattern.With.Digit.Repeat.OneOrMore)

        .Literal(@"-game""")

        .NamedGroup("content", Pattern.With.Anything.Repeat.Lazy.ZeroOrMore)

        .Literal(@"<!--gameStatus")

        .WhiteSpace.Repeat.ZeroOrMore.Literal("=").WhiteSpace.Repeat.ZeroOrMore

        .NamedGroup("gameState", Pattern.With.Digit.Repeat.OneOrMore)

        .Literal("-->");

 

J'aime beaucoup.

TrackBack

URL TrackBack de cette note:
http://www.typepad.com/services/trackback/6a00d8341c871f53ef00e55382adbd8834

Listed below are links to weblogs that reference Les expressions régulières sont illisibles...:

Commentaires

La magie des fluent interfaces...

J'étais tombé sur cette librairie il y a quelques temps déjà ; je n'ai pas eu l'occasion de l'utiliser.

Tu as essayé de mettre la regex pour les dates européennes sous forme "readable" ?
Je ne suis pas convaincu que cette API puisse rendre la chose plus simple à lire...

Ce qu'il faudrait c'est aller dans une direction où l'on puisse se passer définitivement des regex, mais c'est une autre histoire...

@Romain : "fluent interfaces" : tu m'as enlevé les mots de la bouche, enfin plutôt d'un prochain billet ;)

@Oaz : oui l'exemple des dates européennes est un monstre, fluent ou pas fluent. Pour ce pb bien spécifique, un bon candidat pour parvenir à une interface gérable malgré la complexité du problème de parsing pourrait être un DSL. Par exemple une spécialisation des expressions régulières dédiée au parsing des dates.

Vérifiez votre commentaire

Aperçu de votre commentaire

Ceci est un essai. Votre commentaire n'a pas encore été déposé.

En cours...
Your comment could not be posted. Error type:
Votre commentaire a été enregistré. Poster un autre commentaire

Le code de confirmation que vous avez saisi ne correspond pas. Merci de recommencer.

Pour poster votre commentaire l'étape finale consiste à saisir exactement les lettres et chiffres que vous voyez sur l'image ci-dessous. Ceci permet de lutter contre les spams automatisés.

Difficile à lire? Voir un autre code.

En cours...

Poster un commentaire