Przejdź do głównej zawartości

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:

  1. weryfikacji, czy jest to możliwe (np. czy numer telefonu spełnia kryterium ilości cyfr i nie zawierania liter),
  2. pobrania z treści określonych grup (np. podział napisu-listy oddzielanej przecinkami, średnikami na oddzielne fragmenty), oddzielenie imienia od nazwiska,
  3. 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:

  1. wyrażenia - patrz: Funkcje>Wykorzystanie wyrażeń regularnych
  2. operacja podziału wartości pola na rekordy – patrz: Podział pola na rekordy
  3. wyszukiwanie elementów w środowisku projektowym po zaznaczeniu przełącznika Wyrażenia regularne – patrz: Wyszukiwanie w pakietach przetwarzania
  4. identyfikacja elementów nazwy multiplików wejściowych – patrz: Koncepcja mulitiplików
  5. 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 ucieczkiOpisWzorceJest zgodny z
\aDopasowuje znak sygnału dźwiękowego, \u0007.\a\u0007 w elemencie Error! + \u0007
\bW klasie znaków dopasowuje znak backspace, \u0008.[\b]{3}"\b\b\b\b" w elemencie "\b\b\b\b"
\tDopasowuje znak tabulatora, \u0009.(\w+)\t"item1\t", "item2\t" w "item1\titem2\t"
\rDopasowuje 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."
\vDopasowuje tabulator pionowy , \u000B.[\v]{2,}"\v\v\v" w elemencie "\v\v\v"
\fDopasowuje znak wysuwu strony, \u000C.[\f]{2,}"\f\f\f" w elemencie "\f\f\f"
\nDopasowuje znak nowego wiersza, \u000A.\r\n(\w+)"\r\nThese" w elemencie "\r\nThese are\ntwo lines."
\eDopasowuje znak escape, \u001B.\e"\x001B" w elemencie "\x001B"
\ nnnUż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 nnUż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 xPasuje 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 nnnnDopasuje 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ówOpisWzorceJest 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"
\wPasuje do dowolnego znaku słowa.\w"I", "D", "A", "1", "3" w "ID A1.3"
\WDopasuje dowolny znak inny niż wyraz.\W" ", "." w "ID A1.3"
\sDopasuje dowolny znak odstępu.\w\s "D " w elemencie "ID A1.3"
\SDopasuje dowolny znak bez odstępu.\s\S" _" w elemencie"int __ctr"
\dDopasuje dowolną cyfrę dziesiętną.\d "4" w elemencie"4 = IV"
\DDopasuje 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

AsercjaOpisWzorceJest 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"
\ADopasowanie musi wystąpić na początku ciągu.\A\d{3}"901" w elemencie "901-333-"
\ZDopasowanie musi występować na końcu ciągu lub przed \n na końcu ciągu.-\d{3}\Z"-333" w elemencie "-901-333"
\zDopasowanie musi wystąpić na końcu ciągu.-\d{3}\z"-333" w elemencie "-901-333"
\GDopasowanie 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)"
\bDopasowanie 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"
\BDopasowanie 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ącaOpisWzorceJest 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.

KwantyfikatorOpisWzorceJest 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 wstecznegoOpisWzorceJest zgodny z
\numerDopasowanie 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 zmianyOpisWzorceJest 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.

ZnakOpisWzorceWzorzec zamienianiaCiąg wejściowyCiąg wynikowy
$ numerPodstawi 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.

KonstrukcjaDefinicjaPrzykł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

Zobacz również​

Bloczki

Bloczki wejściowe

Zadania