//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
using System;
using System.Text.RegularExpressions;

namespace FrameworkLibraries
{
    public class RegexMain
	{
		public static void Main(String[] args)
		{
			Regex pathregex = new Regex(@"(?<drive>[^:]:\\)?((?<dir>[^\\]+)\\)*(?<file>((?<base>[^.]+)[.]?(?<ext>.*)))");
			string s = @"c:\a\b\c\d\e.cs";

			if ( args.Length > 0 )
			{
				s = args[0];
			}

			Match mc = pathregex.Match(s);

			if ( mc.Success )
			{
				Console.WriteLine("Udało się zanalizować \"{0}\" !!", s);
				Console.WriteLine("Dysk: " + mc.Groups["drive"].Value);
				CaptureCollection cc = mc.Groups["dir"].Captures;
				// Wyświetlenie elementów w grupie.
				Console.WriteLine("Katalogi: {0}", cc.Count);
				// Pętla dla każdego elementu w grupie.
				for (int i = 0; i < cc.Count; i++) 
				{
					Console.WriteLine("{0} rozpoczyna się od znaku {1}", cc[i], cc[i].Index);
				}
				Console.WriteLine("Plik: " + mc.Groups["file"].Value);
				Console.WriteLine("Podstawa: " + mc.Groups["base"].Value);
				Console.WriteLine("Rozszerzenie: " + mc.Groups["ext"].Value);
			}
			else
			{
				Console.WriteLine(s + " nie jest poprawnym adresem ścieżki");
			}
		}
	}
}