Regular Expressions divertendosi ; )

Molti di voi leggendo questo titolo diranno : “Ma è pazzo!” Una parte delle persone che mi conosce ne è convinto, ma dovendo scrivere una RegEx particolare per un particolare problema e giocando un po’ con la fluent interface sono capitato su questo sito. Questo caro ragazzo ha avuto il coraggio ( e il merito ) di rendere una cosa noiosa( e prona agli errori) come la scrittura di una RegEx, in un operazione divertente. Non ci credete facciamo due esempi:

   1: Regex socialSecurityNumberCheck = new Regex(@"^\d{3}-?\d{2}-?\d{4}$");

è diventata

   1: Regex socialSecurityNumberCheck = new Regex(Pattern.With.AtBeginning
   2:         .Digit.Repeat.Exactly(3)
   3:         .Literal("-").Repeat.Optional
   4:         .Digit.Repeat.Exactly(2)
   5:         .Literal("-").Repeat.Optional
   6:         .Digit.Repeat.Exactly(4)
   7:         .AtEnd);

e questa

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

è diventata

   1: Pattern findGamesPattern = Pattern.With.Literal(@"<div")
   2:         .WhiteSpace.Repeat.ZeroOrMore
   3:         .Literal(@"class=""game""").WhiteSpace.Repeat.ZeroOrMore.Literal(@"id=""")
   4:         .NamedGroup("gameId", Pattern.With.Digit.Repeat.OneOrMore)
   5:         .Literal(@"-game""")
   6:         .NamedGroup("content", Pattern.With.Anything.Repeat.Lazy.ZeroOrMore)
   7:         .Literal(@"<!--gameStatus")
   8:         .WhiteSpace.Repeat.ZeroOrMore.Literal("=").WhiteSpace.Repeat.ZeroOrMore
   9:         .NamedGroup("gameState", Pattern.With.Digit.Repeat.OneOrMore)
  10:         .Literal("-->");

veramente un buon lavoro grazie Joshua Flanagan

Per il link alla libreria ReadableRex Source e Dll

Sonny

posted @ giovedì 28 gennaio 2010 00:31

Print

Comments on this entry:

# re: Regular Expressions divertendosi ; )

Left by Emanuele at 28/01/2010 10:43
Gravatar
Complimenti a Joshua! Notizia molto interessante!
Comments have been closed on this topic.