wyrażenia regularne
TRANSCRIPT
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/