Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
ArgumentOutOfRangeException
Message
From
09/03/2010 08:35:42
 
 
To
09/03/2010 01:10:46
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Miscellaneous
Thread ID:
01453133
Message ID:
01453420
Views:
33
>>>Getting rid of the Regex ? You throw away all the fun ...
>>
>>:)
>>
>
>Frank,
>
>Let me introduce you some fun
>
>(1) I would use ^ and $ - otherwise the pattern may match other things than the intented
>
>(2) The Regex class has some static methods (Match(), Matches(), IsMatch(), Replace() ) you can use without having to instantiate an object
>It caches 15 recently used patterns - see CacheSize http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.cachesize.aspx
>
>(3) You can use Groups[ ].Value
>
>
>			string filepath = @"\folder\aaa.bb";
>
>			string pat = @"^.*\\(?:.+)\\(.+)\.(.+)$";
>
>			var m = Regex.Match(filepath, pat);
>			
>
>			if (m.Success)
>			{
>				Console.WriteLine("{0}", m.Groups[1].Value); // aaa
>				Console.WriteLine("{0}", m.Groups[2].Value); // bb
>			}
>			else
>				Console.WriteLine("No match");
>
>
>			Console.ReadLine();
>
>
>(4) The Groups[] collection can be indexed by
>(a) a non-negative integer. I do not like this. You introduce another pair of parentheses somewhere and you've had it. The indexes have changed
>(b) name. This is where named groups come in
>
>
>			string filepath = @"\folder\aaa.bb";
>
>			string pat = @"^.*\\(?:.+)\\(?<FileStem>.+)\.(?<FileExtension>.+)$";
>
>			var m = Regex.Match(filepath, pat);
>			
>
>			if (m.Success)
>			{
>				Console.WriteLine("{0}", m.Groups["FileStem"].Value); // aaa
>				Console.WriteLine("{0}", m.Groups["FileExtension"].Value); // bb
>			}
>			else
>				Console.WriteLine("No match");
>
>
>			Console.ReadLine();
>
>
>(5) You can even nest named groups
>
>			string filepath = @"\folder\aaa.bb";
>
>			string pat = @"^.*\\(?:.+)\\(?<FileName>(?<FileStem>.+)\.(?<FileExtension>.+))$";
>
>			var m = Regex.Match(filepath, pat);
>			
>
>			if (m.Success)
>			{
>				Console.WriteLine("{0}", m.Groups["FileStem"].Value); // aaa
>				Console.WriteLine("{0}", m.Groups["FileExtension"].Value); // bb
>				Console.WriteLine("{0}", m.Groups["FileName"].Value); // aaa.bb
>			}
>			else
>				Console.WriteLine("No match");
>
>
>			Console.ReadLine();
>
>
>(6) Let me also introduce zero-width assertions. They can be positive/negative and lookahead/lookbehind
>An example: Validate a password, constraints are
>(a) at least one lower case char
>(b) at least one upper case char
>(c) at least one digit
>(d) at least 6 chars long
>
>
>
>			string[] test = 
>			{	"1",	//false
>				"2a",	// false
>				"H1a4t", // false
>				"helloThere",	// false
>				"hello1there",	// false
>				"hello1There"	// true
>			};
>
>			// (?=.*\d.*)   zero-width positve lookeahead.  assure at least one digit
>			// (?=.*[a-z].*)   zero-width positve lookeahead.  assure at least one lower case char
>			// (?=.*[A-Z].*)   zero-width positve lookeahead.  assure at least one upper case char
>			// .{6,}			need at least six chars
>			string pat = @"^((?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*).{6,})$";
>
>			foreach( var s in test )
>			{
>				var m = Regex.Match(s, pat);
>				Console.WriteLine("{0}: {1}", m.Success, s);
>			}
>
>
>			Console.ReadLine();
>
>
>(7) Finally, if you want to discover more fun and goodies - there are plenty
>
>http://msdn.microsoft.com/en-us/library/az24scfc.aspx

Thanks for all of that Gregory,

I'll try to digest it when my deadline is off my back and see how applicable it is.
Frank.

Frank Cazabon
Samaan Systems Ltd.
www.samaansystems.com
Previous
Reply
Map
View

Click here to load this message in the networking platform