Wyrażenia regularne
W Mapowaiach a także w Przetwarzaniu danych w wielu miejscach do operacji na napisach są wykorzystywane tzw. wyrażenia regularne (ang. Regular expressions).
Umożliwiają one dopasowywanie podanych napisów do szablonów w celu:
- weryfikacji, czy jest to możliwe (np. czy numer telefonu spełnia kryterium ilości cyfr i nie zawierania liter),
- pobrania z treści określonych grup (np. podział napisu-listy oddzielanej przecinkami, średnikami na oddzielne fragmenty), oddzielenie imienia od nazwiska,
- wymiany dopasowanych elementów na inne (np. zamiana wielu powtarzających się spacji i znaków podkreślenia na pojedynczą spację.
Miejsca wykorzystania wyrażeń w Przetwarzaniu danych:
- wyrażenia - patrz: Funkcje>Wykorzystanie wyrażeń regularnych
- operacja podziału wartości pola na rekordy – patrz: Podział pola na rekordy
- wyszukiwanie elementów w środowisku projektowym po zaznaczeniu przełącznika Wyrażenia regularne – patrz: Wyszukiwanie w pakietach przetwarzania
- identyfikacja elementów nazwy multiplików wejściowych – patrz: Koncepcja mulitiplików
- masowa zmiana nazw elementów w edytorze mapowań– patrz: Masowa zmiana nazw elementów
Znaki unikowe
Znak ukośnika odwrotnego \ w wyrażeniu regularnym wskazuje, że znak, który następuje po nim, jest znakiem specjalnym (jak pokazano w poniższej tabeli) lub powinien być interpretowany dosłownie.
| Znak poprzedzony znakiem ucieczki | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
\a | Dopasowuje znak sygnału dźwiękowego, \u0007. | \a | \u0007 w elemencie Error! + \u0007 |
\b | W klasie znaków dopasowuje znak backspace, \u0008. | [\b]{3} | "\b\b\b\b" w elemencie "\b\b\b\b" |
\t | Dopasowuje znak tabulatora, \u0009. | (\w+)\t | "item1\t", "item2\t" w "item1\titem2\t" |
\r | Dopasowuje znak "powrotu karetki" (oznaczający koniec bieżącej linii tekstu), \u000D. (\r nie jest odpowiednikiem znaku nowego wiersza, \n). | \r\n(\w+) | "\r\nThese" w elemencie "\r\nThese are\ntwo lines." |
\v | Dopasowuje tabulator pionowy , \u000B. | [\v]{2,} | "\v\v\v" w elemencie "\v\v\v" |
\f | Dopasowuje znak wysuwu strony, \u000C. | [\f]{2,} | "\f\f\f" w elemencie "\f\f\f" |
\n | Dopasowuje znak nowego wiersza, \u000A. | \r\n(\w+) | "\r\nThese" w elemencie "\r\nThese are\ntwo lines." |
\e | Dopasowuje znak escape, \u001B. | \e | "\x001B" w elemencie "\x001B" |
\ nnn | Używa reprezentacji ósemkowej do określenia znaku (nnn składa się z dwóch lub trzech cyfr). | \w\040\w | "a b", "c d" w "a bc d" |
\x nn | Używa reprezentacji szesnastkowej do określenia znaku (nn składa się z dokładnie dwóch cyfr). | \w\x20\w | "a b", "c d" w "a bc d" |
\c X \c x | Pasuje do znaku kontrolki ASCII określonego przez znak X lub x, gdzie X lub x jest literą znaku kontrolki. | \cC | "\x0003" w "\x0003" (Ctrl-C) |
\u nnnn | Dopasuje znak Unicode przy użyciu reprezentacji szesnastkowej (dokładnie cztery cyfry, reprezentowane przez nnnn). | \w\u0020\w | "a b", "c d" w "a bc d" |
\ | Kiedy następuje po nim znak, który nie jest rozpoznawany jako znak ucieczki w tej lub innej tabeli zawartej w tym temacie, dopasowuje ten znak. Na przykład \* jest taki sam jak , i \. jest taki sam jak \x2A\x2E. Dzięki temu aparat wyrażeń regularnych może uściślać elementy języka (takie jak * lub ?) i literały znaków (reprezentowane przez \* lub \?). | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "2+2" and "39" w elemencie "(2+2) * 39" |
Klasy znaku
Klasa znaków dopasowuje dowolny zestaw znaków. Klasy znaków obejmują elementy języka wymienione w poniższej tabeli.
| Klasa znaków | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
[character_group] | Pasuje do dowolnego pojedynczego znaku w character_group. Domyślnie w dopasowaniu jest uwzględniana wielkość liter. | [ae] | "a" w elemencie "gray" "a", "e" w "lane" |
[^ character_group] | Negacja: pasuje do każdego pojedynczego znaku, który nie znajduje się w character_group. Domyślnie znaki w character_group są uwzględniane wielkości liter. | [^aei] | "r", "g", "n" w "reign" |
[first - last] [Pierwszym-Ostatnio] | Zakres znaków: pasuje do dowolnego pojedynczego znaku w zakresie od pierwszego do ostatniego. | [A-Z] | "A", "B" w "AB123" |
. | Symbol wieloznaczny: pasuje do dowolnego pojedynczego znaku z wyjątkiem \n. Aby dopasować znak kropki literału (lub \u002E), należy poprzedzić go znakiem ucieczki (.). | a.e | "ave" w elemencie "nave" "ate" w elemencie "water" |
\p{Nazwa} | Pasuje do dowolnego pojedynczego znaku w kategorii ogólnej Unicode lub nazwanego bloku określonego przez nazwę. | \p{Lu} \p{IsCyrillic} | "C", "L" w "City Lights" "Д", "Ж" w "ДЖem" |
\P{Nazwa} | Dopasuje dowolny pojedynczy znak, który nie znajduje się w kategorii ogólnej Unicode lub nazwany blok określony według nazwy. | \P{Lu} \P{IsCyrillic} | "i", "t", "y" w "City" "e", "m" w "ДЖem" |
\w | Pasuje do dowolnego znaku słowa. | \w | "I", "D", "A", "1", "3" w "ID A1.3" |
\W | Dopasuje dowolny znak inny niż wyraz. | \W | " ", "." w "ID A1.3" |
\s | Dopasuje dowolny znak odstępu. | \w\s | "D " w elemencie "ID A1.3" |
\S | Dopasuje dowolny znak bez odstępu. | \s\S | " _" w elemencie"int __ctr" |
\d | Dopasuje dowolną cyfrę dziesiętną. | \d | "4" w elemencie"4 = IV" |
\D | Dopasuje dowolny znak inny niż cyfra dziesiętna. | \D | " ", "=", " ", "I", "V" w "4 = IV" |
Kotwice
Kotwice (niepodzielne asercje o zerowej szerokości) powodują, że sukces lub niepowodzenie dopasowywania jest zależne od bieżącej pozycji w ciągu, ale nie powodują, że aparat przechodzi do dalszej części ciągu lub używa znaków. Metaznaki wymienione w poniższej tabeli są kotwicami
| Asercja | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
^ | Domyślnie dopasowanie musi rozpoczynać się na początku ciągu; w trybie wielowierszowym musi zaczynać się od początku wiersza. | ^\d{3} | "901" w elemcie "901-333-" |
$ | Domyślnie dopasowanie musi występować na końcu ciągu lub przed \n na końcu ciągu; w trybie wielowierszowym musi występować przed końcem wiersza lub przed \n na końcu wiersza. | -\d{3}$ | "-333" w elemcie "-901-333" |
\A | Dopasowanie musi wystąpić na początku ciągu. | \A\d{3} | "901" w elemencie "901-333-" |
\Z | Dopasowanie musi występować na końcu ciągu lub przed \n na końcu ciągu. | -\d{3}\Z | "-333" w elemencie "-901-333" |
\z | Dopasowanie musi wystąpić na końcu ciągu. | -\d{3}\z | "-333" w elemencie "-901-333" |
\G | Dopasowanie musi występować w punkcie, w którym zakończyło się poprzednie dopasowanie, lub jeśli nie było poprzedniego dopasowania, na pozycji w ciągu, w którym rozpoczęto dopasowywanie. | \G\(\d\) | "(1)", "(3)", "(5)" w "(1)(3)(5)[7](9)" |
\b | Dopasowanie musi występować na granicy między znakiem \w (alfanumerycznym) i znakiem \W (niefanumerycznym). | \b\w+\s\w+\b | "them theme" "them them" w "them theme them them" |
\B | Dopasowanie nie może występować na \b granicy. | \Bend\w*\b | "ends", "ender" w "end sends endure lender" |
Konstrukty grupujące
Konstrukcje grupujące wyznaczają podwyrażenia wyrażeń regularnych i często przechwytywane podciągi ciągu wejściowego. Konstrukcje grupowania obejmują elementy języka wymienione w poniższej tabeli.
| Konstrukcja grupująca | Opis | Wzorce | Jest zhodny z |
|---|---|---|---|
(subexpression) | Przechwytuje dopasowane podwyrażenia i przypisuje mu liczbę porządkową (liczone od zera). | (\w)\1 | "ee" w elemencie "deep" |
(?< Nazwa> subexpression) | Przechwytuje dopasowane podwyrażenie do nazwanej grupy. | (?<double>\w)\k<double> | "ee" w elemencie "deep" |
(?< name1 - name2 > subexpression) | Określa definicję grupy równoważącej. Aby uzyskać więcej informacji, zobacz sekcję "Balancing Group Definition" (Równoważenie definicji grupy) w temacie Grouping Constructs (Konstrukcje grupowania). | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "((1-3)(3-1))" w elemencie "3+2^((1-3)(3-1))" |
(?: subexpression) | Definiuje nieprzechwytywaną grupę. | Write(?:Line)? | "WriteLine" w elemencie "Console.WriteLine()" |
(?imnsx-imnsx: subexpression) | Stosuje lub wyłącza określone opcje w podrażeniu. Aby uzyskać więcej informacji, zobacz Opcje wyrażeń regularnych. | A\d{2}(?i:\w+)\b | "A12xl", "A12XL" in "A12xl A12XL a12xl" |
(?= subexpression) | Pozytywna asercja wyprzedzająca o zerowej szerokości. | \w+(?=\.) | "is", "ran", and "out" in "He is. The dog ran. The sun is out." |
(?! subexpression) | Negatywna asercja wyprzedzająca o zerowej szerokości. | \b(?!un)\w+\b | "sure", "used" in "unsure sure unity used" |
(?<= subexpression) | Pozytywna asercja wsteczna o zerowej szerokości. | (?<=19)\d{2}\b | "99", "50", "05" in "1851 1999 1950 1905 2003" |
(?<! subexpression) | Negatywna asercja wsteczna o zerowej szerokości. | (?<!19)\d{2}\b | "51", "03" in "1851 1999 1950 1905 2003" |
(?> subexpression) | Grupa nie podzielna. | [13579](?>A+B+) | "1ABB", "3ABB", and "5AB" in "1ABB 3ABBC 5AB 5AC" |
Kwantyfikatory
Kwantyfikator określa, ile wystąpień poprzedniego elementu (którym może być znak, grupa lub klasa znaków) musi znajdować się w ciągu wejściowym, aby wystąpiło dopasowanie. Kwantyfikatory obejmują elementy języka wymienione w poniższej tabeli.
| Kwantyfikator | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
* | Dopasowuje poprzedni element zero lub większą liczbę razy. | a.*c | "abcbc" w elemencie "abcbc" |
+ | Dopasowuje poprzedni element co najmniej raz. | "be+" | "bee" in "been", "be" in "bent" |
? | Dopasowuje poprzedni element zero lub jeden raz. | "rai?n" | "rai" w elemencie "rain" |
{n} | Dopasuje poprzedni element dokładnie n razy. | ",\d{3}" | ",043" in "1,043.6", ",876", ",543", and ",210" in "9,876,543,210" |
{n ,} | Pasuje do poprzedniego elementu co najmniej n razy. | "\d{2,}" | "166", "29", "1930" |
{n , m} | Pasuje do poprzedniego elementu co najmniej n razy, ale nie więcej niż m razy. | "\d{3,5}" | "166", "17668" "19302" w elemencie "193024" |
*? | Dopasowuje poprzedni element zero lub większą liczbę razy (przy czym ta liczba jest jak najmniejsza). | a.*?c | "abc" w elemencie "abcbc" |
+? | Dopasowuje poprzedni element raz lub większą liczbę razy (przy czym ta liczba jest jak najmniejsza). | "be+?" | "be" in "been", "be" in "bent" |
?? | Dopasowuje poprzedni element zero lub jeden raz (przy czym liczba dopasowań jest jak najmniejsza). | "rai??n" | "ran" w elemencie "rain" |
{n}? | Dopasuje poprzedni element dokładnie n razy. | ",\d{3}?" | ",043" in "1,043.6", ",876", ",543", and ",210" in "9,876,543,210" |
{n ,}? | Dopasuj poprzedni element co najmniej n razy, ale jak najmniej raz. | "\d{2,}?" | "166", "29", "1930" |
{n , m}? | Dopasuje poprzedni element między n i m razy, ale jak najmniej. | "\d{3,5}?" | "166", "17668" "193", "024" in "193024" |
Konstrukty grupowania wstecznego
Dopasowywanie wsteczne umożliwia kolejne identyfikacje uprzednio dopasowanego podwyrażenia w tym samym wyrażeniu regularnym. W poniższej tabeli wymieniono konstrukcje wycofywania obsługiwane przez wyrażenia regularne na platformie .NET.
| Konstrukcja dopasowania wstecznego | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
\numer | Dopasowanie wsteczne. Dopasowuje wartość numerowanego podwyrażenia. | (\w)\1 | "ee" w elemencie "seek" |
\k< nazwa> | Nazwane dopasowanie wsteczne. Dopasowuje wartość nazwanego wyrażenia. | (?<char>\w)\k<char> | "ee" w elemencie "seek" |
Konstrukty naprzemienne
Konstrukcje zmiany modyfikują wyrażenie regularne, aby umożliwić dopasowanie typu albo/albo. Te konstrukcje obejmują elementy języka wyszczególnione w poniższej tabeli. Aby uzyskać więcej informacji, zobacz Konstrukcje zmiany.
| Konstrukcje zmiany | Opis | Wzorce | Jest zgodny z |
|---|---|---|---|
| | Dopasuje dowolny jeden element oddzielony znakiem pionowego paska (|). | th(e|is|at) | "the", "this" w "this is the day. " |
(?(Wyrażenie)Tak|Nr) lub (?(Wyrażenie)Tak) | Dopasowuje wartość tak , jeśli wzorzec wyrażenia regularnego wyznaczony przez wyrażenie jest zgodny; w przeciwnym razie pasuje do opcjonalnego braku części. Wyrażenie jest interpretowane jako asercji o zerowej szerokości. | (?(A)A\d{2}\b|\b\d{3}\b) | "A10", "910" w "A10 C103 910" |
(?(Nazwa)Tak|Nr) lub (?(Nazwa)Tak) | Dopasowuje wartość tak , jeśli nazwa, nazwa lub numerowana grupa przechwytywania, ma dopasowanie; w przeciwnym razie pasuje do opcjonalnego nr. | (?<quoted>")?(?(quoted).+?"|\S+\s | \S+\s)` |
Zastępstwa
Podstawienia są elementami języka wyrażeń regularnych, które są obsługiwane we wzorcach zamieniania. Aby uzyskać więcej informacji, zobacz Podstawianie. Metaznaki wymienione w poniższej tabeli są niepodzielnymi asercjami o zerowej szerokości.
| Znak | Opis | Wzorce | Wzorzec zamieniania | Ciąg wejściowy | Ciąg wynikowy |
|---|---|---|---|---|---|
$ numer | Podstawi podciąg dopasowany przez numer grupy. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "one two" | "two one" |
${nazwa} | Zastępuje podciąg zgodny z nazwaną nazwą grupy. | \b(?<word1>\w+)(\s)(?<word2>\w+)\b | ${word2} ${word1} | "one two" | "two one" |
$$ | Podstawia literał „$”. | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | Podstawia kopię całego dopasowania. | (\$*(\d*(\.+\d+)?){1}) | **$& | "$1.30" | "**$1.30**" |
$` | Podstawia cały tekst ciągu wejściowego przed dopasowaniem. | B+ | $` | "AABBCC" | "AAAACC" |
$' | Podstawia cały tekst ciągu wejściowego po dopasowaniu. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | Podstawia ostatnią przechwyconą grupę. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | Podstawia cały ciąg wejściowy. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
Różne konstruktory
Konstrukcje inne służą do modyfikowania wzorca wyrażenia regularnego lub dostarczania informacji na jego temat. W poniższej tabeli wymieniono różne konstrukcje obsługiwane przez platformę .NET. Aby uzyskać więcej informacji, zobacz Różne konstrukcje.
| Konstrukcja | Definicja | Przykład |
|---|---|---|
(?imnsx-imnsx) | Ustawia lub wyłącza opcje, takie jak brak uwzględniania wielkości liter w środku wzorca. Aby uzyskać więcej informacji, zobacz Opcje wyrażeń regularnych. | \bA(?i)b\w+\b dopasuj wartość "ABA", "Able" w "ABA Able Act" |
(?# komentarz) | Komentarz w tekście. Komentarz kończy się przy pierwszym nawiasie zamykającym. | \bA(?#Matches words starting with A)\w+\b |
# [do końca wiersza] | Komentarz trybu X. Komentarz zaczyna się od niewyobrażanego # krajobrazu i kontynuuje koniec linii. | (?x)\bA\w+\b#Matches words starting with A |
Kolejny rozdział: Testy GUI