Wyrażenia Regularne

Post on 18-Jun-2015

4.280 views 1 download

Transcript of Wyrażenia Regularne

WYRAŻENIA REGULARNE

Zastosowania wyrażeń regularnych

Walidacja ciągów pod kątem zgodności ze wzorcem: IsMatch(), Match().

Wyszukiwanie podciągów zgodnych ze wzorcem: Matches(), Match().

Zastępowanie ciągów innymi ciągami: Replace().

Dzielenie ciągów na podciągi na podstawie wzorcowego ciągu dzielącego: Split().

Analiza leksykalna – konwersja ciągów w tokeny.

Budowanie wrażeń regularnychZnaki dopasowań: \d – liczba 0-9 \D – wszystko oprócz liczb \w – słowo, znak a-z,A-Z,0-9 i _ \W – wszystkie znaki oprócz pasujących do \w \n \r \t \v \f – nowa linia, powrót karetki,

tabulacja,pionowa tabulacja, nowa strona \s biała spacja \S wszystko oprócz białej spacji

Budowanie wrażeń regularnychZnaki powtórzeńWpływają na akceptowalną powtarzalność

poprzedzanego znaku lub grupy. {n} – występuje n razy + – przynajmniej raz (1 – ∞ ) * – dowolną ilość razy (0 – ∞) ? – zero lub raz (0,1) {n,} – n lub więcej razy (n – ∞) {n,m} – od n do m wystąpień (n – m)

Budowanie wrażeń regularnychZnaki pozycyjne ^ – początek interpretowanego ciągu* $ – koniec interpretowanego ciągu*Znaki specjalne \} \{ \( \) \\

* - opcja RegexOptions.Multiline modyfikuje dopasowanie ^ oraz $

Budowanie wrażeń regularnych . – każdy znak oprócz \n * | – logiczna alternatywa (\s|c) znaczy albo biała spacja

albo ‘c’ [] – dowolny znak z podanych [ac] znaczy ‘a’ lub ‘c’ [^] – dowolny znak oprócz podanych [^ac] znaczy

dowolny znak oprócz ‘a’ i ‘c’ \b – granica słowa (występuje między \w a \W) \B – granica nie słowa \z – koniec łańcucha \Z – koniec łańcucha lub nowa linia

* – opcja RegexOptions.Singleline modyfikuje dopasowanie .

Analiza przykładowego wyrażenia

[1-9]\d[1-9]-?\d{3}-?\d{2}-?\d{2}

Liczba od 1 do 9 Liczba od 1-9

Dowolna liczba

Znak ‘-’ zero lub jeden raz

Znak ‘-’ zero lub jeden raz

Znak ‘-’ zero lub jeden raz

Trzy liczby Dwie liczby Dwie liczby

Grupowanie

Znaki grupujemy za pomocą nawiasów ():(\d{3})-?(\d{3})-?(\d{2})-?(\d{2})Wynik parsowania 123-456-78-90:Grupa 1: 123Grupa 2: 456Grupa 3: 78Grupa 4: 98

Wynik parsowania 9087654321:Grupa 1: 908Grupa 2: 765Grupa 3: 43Grupa 4: 21

Możemy usunąć grupowanie, jeśli chcemy użyć nawiasów np. do grupowania ciągów z alternatywą używając ‘?:’ (?: a | b | \d){3} – (\d | \w)Wynik dla a3b - 7:Grupa 1: 7

Nazywanie grup, odwołania

Grupy możemy nazywać używając składni (?<nazwa_grupy>) np. (?<user>[a-zA-Z_.]+)

Odwoływanie się do grup Przez numer grupy \numer_grupy np.: (\b[a-zA-Z]+\b)\s\1

Przez nazwe grupy \k<nazwa_grupy> np.: (?<word>\b[a-zA-Z]+\b)\s\k<word>

Ciągi testowe:test test //pasuje

Slowo1 slowo2 //nie pasuje

Używanie wyrażeń regularnych w .net

Tworząc explicite obiekt

Statyczne wywołanie

Regex visaCardValidation = new Regex("^([4]{1})([0- 9]{12,15})$"); if (!visaCardValidation.IsMatch(”4125632152365")) { //[...] }

if (!Regex.IsMatch("4125632152365", "^([4]{1})([0-9]{12,15})$")) { //[...] }

Używanie wyrażeń regularnych w .net

Konstruktor z opcjami RegexOptions

Przeciążone metody statyczne z opcjami RegexOptions

Regex chinaUnicomPhoneNo = new Regex(„^(\+?(?:86)?)(s?-?)((13[0-4])(\d{4})(\d{4}))$”, RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace)

Regex.IsMatch(„+8613012345678”, „^(\+?(?:86)?)(s?-?)((13[0- 4])(\d{4})(\d{4}))$”, RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace)

RegexpOptions

Opcja Opis

None Brak opcji

IgnoreCase Dopasowanie nie zależy od wielkości znaków

Multiline Modyfikuje dopasowanie ^ i $. Pasują odpowiednio do początku i końca każdej linii w ciągu.

ExplicitCapture

Aby utworzyć grupę musimy ją jawnie nazwać lub nadać numer. Nie potrzeba używać (?:….) do anulacji grupowania.

Compiled Wyrażenie regularne jest kompilowane do MSIL. Szybciej działa przy wielokrotnym wykorzystniu tego samego wzorca.

Singleline Modyfikuje dopasowanie ‘.’ – korpka pasuje do każdego znaku nwet \n

IgnorePattern – Whitespace

Ignoruje białe znaki we wzorcu. Pozwala na stosowanie komentarzy (?#komentarz … )

RightToLeft Ciąg przeszukiwany jest od prawej do lewej

RegexpOptions

Opcja Opis

ECMAScript Wymusza walidację zachowującą się zgodnie ze specyfikację ECMAScript. Opcję tą można użyć tylko z opcjami Multiline i IgnoreCase. Inne złożenie spowoduje wyjątek.

CultureInvariant Różnice językowe są ignorowane. (np. ‘i’ oraz ‘I’ traktowane jest tak samo.

Match() Matches()

Match() Sprawdza zgodność ciągu ze wzorcem

(sukces gdy choć jeden podciąg pasuje do wzorca).

Zwraca obiekt Match z pierwszym podciągiem pasującym do wzorca

Matches() Wyszukuje w ciągu wszystkie podciągi

pasujące do wzorca Zwraca obiekt MatchCollection

MatchCollection

Match

GroupCollection

Group Group

CatureCollection

Capture Capture Capture

Group

Match Match

Zastępowanie podciągów: Replace()

Zastępuje każdy podciąg pasujący do wzorca nową wartością.

String MDYToDMY(String input)

{

return Regex.Replace(input,

"\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b",

"${day}-${month}-${year}");

}

Zastąpi daty w formacie mm\dd\yyyy na daty w formacie dd-mm-yyyy

Znaki specjalne ciągu zastępującego dopasowania

Znak Przez co zostanie zastąpiony

$n Ostatnie dopasowanie grupy o numerze n

${nazwa} Ostatnie dopasowanie grupy o podanej nazwie

$$ Pojedynczy znak $

$& Cały dopasowany podciąg

$` Cały ciąg poddany analizie

$’ Cały ciąg po analizie

$+ Ostatnio dopasowana grupa

$_ Cały ciąg wejściowy

Przykład zastosowania replace()

Zamiana pełnych adresów e-mail na ciągi nie rozpoznawane przez boty:

Regex.replace(strTekst,

@”\b(?user:(.|\w)*)@(?domain:(.|\w)*\b)”, „${user}_malpa_${domain}”)

Użycie funkcji split()

Dzieli wejściowy ciąg na podciągi, przyjmując jako znak podziału wyrażenie regularne.

Zwraca tablicę wyznaczonych podciągów.

Regex.Split(

Walidacja danych wejściowych RegularExpresionValidator

Dane wejściowe z kontrolki walidowane są pod kątem zgodności z podanym wzorcem

Przykład …

Wyrażenia regularne w JavaScript

Wyrażenia zapisujemy między dwoma znakami /. Za końcowym / możemy dodać flagi, np. var reg = /\b\w*\b/gzwróci wszystkie słowa w tekście.

Dostepne flagi g – przeszukiwanie globalne (bez tej flagi

zostanie znalezione pierwsze wystąpienie) i – odpowiednik ignore-cases m – odpowiednik multiline

Wyrażenia regularne w JavaScript

Dostępne funkcje str.search(regexp) – zwraca pozycję

pierwszego wystąpienia wzorca (-1 jeśli nie znaleziono).

var resultTab = str.match(regexp) - zwraca do tablicy wszystkie podciągi pasujące do wzorca

str =str.replace(regexp_co, naco) – zamienia podciągi pasujące do wzorca na nową wartość.

Wyrażenia regularne w JavaScript

Var resultTab = str.split(regex) – dzieli ciąg na podciągi przyjmując za miejsce podzialu dopasowania regex.

var reg = new Regexp(regex); reg.test(tekst) - sprawdza czy podany ciąg pasuje do wzorca

Dodatkowe informacje:http://www.devshed.com/c/a/JavaScript/

Understanding-the-JavaScript-RegExp-Object/