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