XXP

mai 2016

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.

L'utilisation des commentaires est désactivée pour cette note.