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