Dla wi kszo ci prostych gramatyk mo na w atwy sposób napisa wyra enie regularne które b dzie s u y o do sprawdzania poprawno ci zda z t gramatyk. Celem niniejszego laboratorium b dzie zapoznanie si z wyra eniami regularnymi (Regex) wyst puj cymi w j zyku C# oraz napisanie odpowiednich wyra e regularnych do sprawdzania poprawno ci zda z zadanymi gramatykami. 1. Podstawy budowania wyra e regularnych (Regex) Znaki:. $ ^ { [ ( ) ] } * +? \ s w wyra eniach regularnych znakami specjalnymi. Przy u yciu poni szych symboli mo na zaznaczy dopasowanie do 'klasy' znaków.. Dowolny znak [abc] Dowolny znak ze wskazanego zbioru [^abc] Dowolny znak ró ny od tych w zbiorze [a-z0-9] Dowolny znak z zakresu \w Dowolny znak typu: litera, cyfra, podkre lnik \W Dowolny znak inny ni : litera, cyfra, podkre lnik \s Dowolny bia y znak (spacja, ) \S Dowolny znak ró ny ni znak bia y \d Dowolna cyfra \D Dowolny znak inny ni cyfra 2
Przy u yciu poni szych symboli mo na zaznaczy miejsce w tek cie gdzie ma doj do dopasowania. ^ Dopasowanie musi si pojawi na pocz tku tekstu $ Dopasowanie musi si pojawi na ko cu tekstu \b Dopasowanie musi si znajdowa na pocz tku lub ko cu s owa \B Dopasowanie nie mo e si znajdowa na pocz tku ani ko cu s owa Za pomoc poni szych symboli mo na okre li ile razy dany znak (lub grupa znaków) ma wyst pi. * Zero lub wi cej razy + Jeden lub wi cej razy? Zero lub jeden raz {n} Dok adnie n razy {n,} Co najmniej n razy {n,m} Co najmniej n razy ale nie wi cej ni m razy Poni ej przedstawiono kilka innych elementów. \ Uko nik jest równie znakiem ucieczki, tzn. likwiduje znaczenie znaków specjalnych, np. \. Znaczy dos ownie kropka \0x20 Kod szesnastkowy znaku ASCII \u0020 Kod szesnastkowy znaku Unicode ( ) Nawiasy zwyk e u ywane s do grupowania symboli Pionowa kreska oznacza alternatyw Uwaga: Wyra enia regularne s wpisywane jako a cuchy znakowe (String), w których znak uko nika (\) ma równie specjalne znaczenie, dlatego wpisuj c wyra enie regularne nale y podwójnie wpisywa znak uko nika je li ma on pe ni funkcje znaku ucieczki. Tzn. zamiast wpisa \\ wpisujemy \\\\, ale je eli znak uko nika nie pe ni funkcji znaku ucieczki to wpisujemy normalnie np. \d. 3
Przyk ad dzia ania wyra e regularnych: - sprawdzanie kodu pocztowego: ^\d{2}-\d{3}$ - sprawdzenie adresu www: ^www\.[-\w]+(\.[-\w]+)+$ - sprawdzanie adresu IP: ^0*(25[0-5] 2[0-4]\d 1?\d\d?)(\.0*(25[0-5] 2[0-4]\d 1?\d\d?)){3}$ Je eli chcemy dokona dok adnego sprawdzenia zgodno ci wpisanego tekstu z wyra eniem regularnym to na pocz tku wyra enia regularnego musimy umie ci znak ^ a na jego ko cu znak $. Wi cej informacji o wyra eniach regularnych: http://www.codeguru.pl/article-696.aspx http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx 2. Jak przej z definicji gramatyki na wyra enia regularne Do przej cia na wyra enia regularne najlepiej nadaj si gramatyki zapisane w notacji MBNF w której dochodz dodatkowe symbole: [ ] Oznacza wyst pienie jakiego symbolu zero lub jeden raz { } Oznacza wyst pienie jakiego symbolu nieokre lon ilo razy ( ) Oznacza grup symboli Przej cie z gramatyki na wyra enie regularne zostanie przedstawione na przyk adzie prostej gramatyki dla adresu e-mail. S:: A@ A.W A :: W{.W} W :: L{L} L :: a b c d e x y z Nast pnie nale y kolejno po podstawia do poszczególnych symboli. W rezultacie otrzymamy: S::=(a b c z){(a b c z)}{.(a b c z){(a b c z)}} @(a b c z){(a b c z)}{.(a b c z){(a b c z)}}.(a b c z){(a b c z)} 4
Z kolei ten zapis jest ju bez ma a wyra eniem regularnym: ^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)*\.[a-z]+$ Niestety je eli w gramatyce wyst puje rekurencyjne wywo anie jakiego symbolu, to nie mo na dokona podstawienia i nie da si zbudowa wyra enia regularnego do sprawdzenia tej gramatyki. Np. S:: W;{W;} W :: POP{OP} P :: O :: * L (W) / ^ Gdy podstawimy P do W to w W b dziemy mieli rekurencyjne odwo anie do W. i nie b dzie mo liwe dokonanie dalszych podstawie. 3. Program W trakcie laboratorium mo na korzysta z przygotowanego programu w którego jednym polu nale y wpisa wyra enie regularne a w drugim zdanie do sprawdzenie przy pomocy tego wyra enia regularnego. 5
4. Zadania Napisa wyra enia regularne dla sprawdzania zgodno ci zda z zadanymi gramatykami: S:: W;{W;} W :: LOL{OL} O :: * / ^ 12+2;3*8^12-2/3; S:: A[.L][eA] A :: [ ]L -15.6e-3 Wymy li gramatyk i napisa dla niej wyra enie regularne. 6