Wyświetlenia:

Wyrażenia regularne służą do dopasowywania łańcuchów znaków. Niektóre typowe przykłady wyrażeń regularnych podano w następujących tabelach. Aby określić wyrażenie regularne, podany wzorzec należy poprzedzić operatorem „.REG.”.

W sieci jest dostępnych wiele witryn i przewodników. Jedną z takich witryn jest PerlDoc, dostępna pod adresem:

http://www.perl.com/doc/manual/html/pod/perlre.html

Ostrzeżenie:

Wyrażenia regularne to bardzo skuteczne narzędzie służące do dopasowywania łańcuchów znaków. Dlatego też firma Trend Micro zaleca, aby administratorzy decydujący się na korzystanie z nich, znali dobrze ich składnię. Błędnie napisane wyrażenia regularne mogą znacznie obniżyć wydajność. Firma Trend Micro zaleca stosowanie na początku prostych wyrażeń regularnych, które nie mają skomplikowanej składni. Wprowadzając nowe reguły, należy korzystać z funkcji archiwizacji i obserwować, jak program Messaging Security Agent zarządza wiadomościami przy użyciu tych reguł. Gdy okaże się, że reguła nie wprowadza żadnych nieoczekiwanych zmian, można zmienić akcję.

Przykłady wyrażeń regularnych

Niektóre typowe przykłady wyrażeń regularnych podano w następujących tabelach. Aby określić wyrażenie regularne, podany wzorzec należy poprzedzić operatorem „.REG.”.

Tabela 1. Zliczanie i grupowanie

Element

Znaczenie

Przykład

.

Znak kropki reprezentuje dowolny znak, z wyjątkiem znaku nowej linii.

Ciąg pie. powoduje dopasowanie słowa pies, piec itd.

Ciąg za.p powoduje dopasowanie słowa zakup, zakop itd.

*

Znak gwiazdki oznacza zero lub więcej wystąpień elementu poprzedzającego.

Ciąg do* powoduje dopasowanie ciągów znaków d, do, doo, dooo itd.

+

Znak plus oznacza jedno lub więcej wystąpień elementu poprzedzającego.

Ciąg do+ powoduje dopasowanie ciągów znaków do, doo, dooo itd., ale nie d.

?

Znak zapytania oznacza zero lub jedno wystąpienie elementu poprzedzającego.

Ciąg wie?lki powoduje dopasowanie słów wilki i wielki, ale nie wieelki, wieeelki itd.

( )

Nawiasy służą do łączenia wzorca znajdującego się między nimi w jedną grupę, która jest następnie traktowana jak pojedynczy element.

Ciąg j(eleń)+ powoduje dopasowanie słowa jeleń, jeleńeleń lub jeleńeleńeleń itd. Znak + odnosi się do ciągu ujętego w nawiasy, więc funkcja dopasowuje znak j, po którym następuje jedno lub więcej wystąpień ciągu „eleń”.

[ ]

Nawiasy kwadratowe wskazują zbiór lub zakres znaków.

Ciąg d[aeiouy]+ powoduje dopasowanie ciągów znaków da, de, di, do, du, dy, daa, dae, dai itd. Znak + odnosi się do zbioru wskazanego w nawiasach, więc funkcja dopasowuje znak d, po którym następuje jeden lub więcej znaków ze zbioru [aeiouy].

Do d[A-Z] pasują: dA, dB, dC itd. aż do dZ. Zestaw w nawiasach kwadratowych reprezentuje przedział złożony ze wszystkich wielkich liter: od A do Z.

[ ^ ]

Znak daszka w nawiasach kwadratowych logicznie neguje określony zbiór lub zakres. Funkcja dopasuje więc każdy znak, który nie znajduje się w zbiorze lub zakresie.

Do d[^aeiouy] pasują: db, dc lub dd, d9, d#, czyli litera d, po której następuje dowolny pojedynczy znak, z wyjątkiem samogłoski nienosowej.

{ }

Nawiasy klamrowe określają konkretną liczbę wystąpień elementu poprzedzającego. Pojedyncza wartość w nawiasach spowoduje dopasowanie dokładnie takiej liczby wystąpień. Para liczb rozdzielonych przecinkiem reprezentuje zbiór właściwych liczb wystąpień poprzedniego znaku. Pojedyncza cyfra, po której następuje przecinek, oznacza brak górnej granicy.

Do da{3} pasuje daaa, czyli litera d, po której następują dokładnie 3 wystąpienia litery „a”. Do da{2,4} pasują: daa, daaa, daaaa, and daaaa (ale nie: daaaaa), czyli litera d, po której następują 2, 3 lub 4 wystąpienia litery „a”. Do da{4,} pasują: daaaa, daaaaa, daaaaaa itd., czyli litera d, po której następują nie mniej niż 4 wystąpienia litery „a”.

Tabela 2. Klasy znaków (zapis skrótowy)

Element

Znaczenie

Przykład

\d

Dowolny znak cyfry. Zapis ten jest równoważny oznaczeniu [0-9] i [[:digit:]].

Do \d pasują: 1, 12, 123 itd., ale nie 1b7, czyli przynajmniej jedna cyfra.

\D

Dowolny znak oprócz cyfr. Zapis ten jest równoważny oznaczeniu [^0-9] i [^[:digit:]].

Ciąg \D powoduje dopasowanie ciągów a, ab, ab&, ale nie 1 — czyli jednego lub więcej wystąpień dowolnego znaku oprócz 0, 1, 2, 3, 4, 5, 6, 7, 8 lub 9.

\w

Dowolny znak „słowa”, tzn. dowolny znak alfanumeryczny; funkcjonalny odpowiednik zapisu [_A-Za-z0-9] lub [_[:alnum:]]

Ciąg \w powoduje dopasowanie zwrotów a, ab, a1, ale nie !& — czyli jednej lub więcej małych bądź wielkich liter lub cyfr, ale nie znaków interpunkcyjnych ani innych znaków specjalnych.

\W

Dowolny znak niealfanumeryczny; funkcjonalny odpowiednik zapisu [^_A-Za-z0-9] lub [^_[:alnum:]]

Ciąg \W powoduje dopasowanie zwrotów *, &, ale nie as czy a1 — czyli jednego lub więcej dowolnych znaków z wyjątkiem małych i wielkich liter oraz cyfr.

\s

Dowolny znak odstępu: znak spacji, nowego wiersza, tabulatora, spacji nierozdzielającej itd. Ten zapis jest równoważny oznaczeniu [[:space:]].

Ciąg por\s odpowiada zwrotowi „por”, po którym następuje dowolny znak niewidoczny. Zatem na frazę „Lubię por w zupie” funkcja regex zareagowałaby, ale na frazę „Lubię pory w zupie” już nie.

\S

Dowolny znak inny niż odstęp: wszystko oprócz znaku spacji, nowego wiersza, tabulatora, spacji nierozdzielającej itd. Ten zapis jest równoważny oznaczeniu [^[:space:]].

Ciąg por\S odpowiada zwrotowi „por”, po którym następuje dowolny znak widoczny. Zatem na frazę „Lubię pory w zupie” funkcja regex zareagowałaby, ale na frazę „Lubię por w zupie” już nie.
Tabela 3. Klasy znaków

Element

Znaczenie

Przykład

[:alpha:]

Dowolny znak alfabetyczny

.REG. [[:alpha:]] powoduje dopasowanie ciągów znaków abc, def, xxx, ale nie 123 ani @#$.

[:digit:]

Dowolna cyfra; funkcjonalny odpowiednik zapisu \d

.REG. [[:digit:]] powoduje dopasowanie ciągów znaków 1, 12, 123 itd.

[:alnum:]

Dowolny znak „słowa”, tzn. dowolny znak alfanumeryczny; funkcjonalny odpowiednik zapisu \w.

.REG. [[:alnum:]] powoduje dopasowanie ciągów znaków abc, 123, ale nie ~!@.

[:space:]

Dowolny znak biały: znak odstępu, nowej linii, tabulacji, odstępu nierozdzielającego itd. Zapis ten jest równoważny oznaczeniu \s.

.REG. (por)[[:space:]] powoduje dopasowanie słowa „por”, po którym następuje dowolny znak niewidoczny. Zatem na frazę „Lubię por w zupie” funkcja regex zareagowałaby, ale na frazę „Lubię pory w zupie” już nie.

[:graph:]

Dowolne znaki z wyjątkiem znaku odstępu, znaków sterujących itp.

.REG. [[:graph:]] pasują: 123, abc, xxx, ><”, ale nie spacja ani znaki sterujące.

[:print:]

Dowolne znaki (podobnie jak [:graph]), ale obejmuje także znak odstępu.

.REG. [[:print:]] pasują 123, abc, xxx, ><” i spacje.

[:cntrl:]

Dowolne znaki sterujące (np. CTRL+C, CTRL+X)

.REG. [[:cntrl:]] powoduje dopasowanie ciągów znaków 0x03, 0x08, ale nie abc, 123, !@#.

[:blank:]

Znaki odstępu i tabulacji

.REG. [[:blank:]] powoduje dopasowanie znaków odstępu i tabulacji, ale nie ciągów znaków 123, abc, !@#.

[:punct:]

Znaki interpunkcyjne

.REG. [[:punct:]] powoduje dopasowanie znaków ; : ? ! ~ @ # $ % & * ‘ “ itd., ale nie ciągów 123, abc.

[:lower:]

Dowolne małe litery. (Uwaga: musi być włączona opcja „Dopasuj z uwzględnieniem wielkości liter”, bo w przeciwnym razie będzie funkcjonować jako [:alnum:]).

.REG. [[:lower:]] powoduje dopasowanie ciągów znaków abc, Def, sTres, Do itp., ale nie ABC, DEF, STRES, DO, 123, !@#.

[:upper:]

Dowolne wielkie litery. (Uwaga: musi być włączona opcja „Dopasuj z uwzględnieniem wielkości liter”, bo w przeciwnym razie będzie funkcjonować jako [:alnum:]).

.REG. [[:upper:]] powoduje dopasowanie ciągów znaków ABC, DEF, STRES, DO itp., ale nie abc, Def, Stres, Do, 123, !@#.

[:xdigit:]

Cyfry dozwolone w liczbach szesnastkowych (0-9a-fA-F).

.REG. [[:xdigit:]] powoduje dopasowanie ciągów znaków 0a, 7E, 0f itd.

Tabela 4. Punkty zaczepienia wzorców

Element

Znaczenie

Przykład

^

Wskazuje początek ciągu znaków.

Ciąg ^(mimo wszystko) powoduje dopasowanie dowolnego bloku tekstu zaczynającego się słowami „mimo wszystko”. Zatem na frazę „mimo wszystko faktycznie lubię pory w zupie” funkcja regex zareagowałaby, ale na frazę „faktycznie lubię pory w zupie mimo wszystko” już nie.

$

Wskazuje koniec ciągu znaków.

Ciąg (mimo wszystko)$ powoduje dopasowanie dowolnego bloku tekstu kończącego się słowami „mimo wszystko”. Zatem na frazę „mimo wszystko faktycznie lubię pory w zupie” funkcja regex nie zareagowałaby, ale na frazę „faktycznie lubię pory w zupie mimo wszystko” — tak.

Tabela 5. Sekwencje specjalne i łańcuchy literałowe

Element

Znaczenie

Przykład

\

Służy do dopasowywania znaków mających specjalne znaczenie w wyrażeniu regularnym (na przykład „+”).

(1) Do .REG. C\\C\+\+ powoduje dopasowanie ciągów znaków C\C++.

(2) Do .REG. \* pasuje znak *.

(3) Do .REG. \? pasuje znak ?.

\t

Oznacza znak tabulatora.

Ciąg (stres)\t powoduje dopasowanie dowolnego bloku tekstu zawierającego podłańcuch „stres”, po którym bezpośrednio następuje tabulator (znak 0x09 w kodzie ASCII).

\n

Oznacza znak nowego wiersza.

Uwaga:

Znak nowego wiersza różni się w zależności od platformy. W systemie Windows jest to para znaków: znak powrotu karetki, po którym występuje znak wysuwu wiersza. W systemach Unix i Linux nowy wiersz jest oznaczany samym znakiem przejścia do nowego wiersza, natomiast w systemie Macintosh nowy wiersz jest oznaczany samym znakiem powrotu karetki.

Ciąg (stres)\n\n powoduje dopasowanie dowolnego bloku tekstu zawierającego podciąg stres, bezpośrednio po którym występują dwa znaki nowego wiersza (kod ASCII 0x0A).

\r

Oznacza znak powrotu karetki.

Ciąg (stres)\r powoduje dopasowanie dowolnego bloku tekstu zawierającego podłańcuch „stres”, po którym bezpośrednio następuje jeden znak powrotu karetki (znak 0x0D w kodzie ASCII).

\b

Oznacza znak cofania.

OR

Oznacza granice.

Ciąg (stres)\b powoduje dopasowanie dowolnego bloku tekstu zawierającego podciąg „stres”, po którym bezpośrednio następuje jeden znak cofania (kod ASCII 0x08).

Granica słowa (\b) to punkt między dwoma znakami, gdzie po jednej stronie znajduje się ciąg \w, a po drugiej ciąg \W (w dowolnej kolejności), zliczający znaki pozorne od końca i od początku ciągu zgodnego z \W. (W klasach znaków \b oznacza znak cofania, a nie granicę słowa).

Przykładowo poniższe wyrażenie regularne pasuje do numeru ubezpieczenia społecznego: .REG. \b\d{3}-\d{2}-\d{4}\b

\xhh

Oznacza znak w kodzie ASCII o podanym numerze szesnastkowym (hh reprezentuje dowolną dwucyfrową liczbę szesnastkową).

Ciąg \x7E(\w){6} powoduje dopasowanie dowolnego bloku tekstu zawierającego „słowo” składające się z dokładnie sześciu znaków alfanumerycznych poprzedzonych znakiem tyldy (~). Zatem pasowałyby słowa „~ab12cd”, „~Pa3499”, ale słowo „~ojej” już nie.

Generator wyrażeń regularnych

Przy podejmowaniu decyzji o konfiguracji reguł funkcji zapobiegania utracie danych należy pamiętać, że generator wyrażeń regularnych służy wyłącznie do tworzenia prostych wyrażeń zgodnie z poniższymi regułami i ograniczeniami:

  • zmiennymi mogą być wyłącznie znaki alfanumeryczne;

  • wszystkie pozostałe znaki, takie jak [-], [/] itp., mogą być wyłącznie stałymi;

  • można używać wyłącznie przedziałów zmiennych A-Z i 0-9, nie można ograniczać przedziałów do, przykładowo, zakresu A-D;

  • w wyrażeniach regularnych generowanych przez to narzędzie nie rozpoznaje się wielkości liter;

  • Wyrażeń regularnych generowanych przez to narzędzie można używać tylko w pozytywnych warunkach wyszukiwania, a nie negatywnych („jeżeli nie jest zgodne”).

  • Wyrażenia oparte na przykładzie umożliwiają tylko wyszukiwanie dokładnie takiej samej liczby znaków i spacji, jak w przykładzie; to narzędzie nie generuje wzorców, dla których istnieje „jeden lub kilka” odpowiedników danego znaku lub łańcucha.

Składnia wyrażeń złożonych

Wyrażenie słowa kluczowego złożone jest z tokenów, które są najmniejszą jednostką używaną do dopasowania wyrażenia do treści. Tokenem może być operator, symbol logiczny lub operant tj. argument lub wartość, na której działa operator.

Operatory obejmują .AND., .OR., .NOT., .NEAR., .OCCUR., .WILD., “.(.” i “ .).” Operant i operator muszą być oddzielone spacją. Operant może również zawierać kilka tokenów. Patrz sekcja Słowa kluczowe.

Wyrażenia regularne w praktyce

Następujący przykład opisuje jak działa filtr numeru ubezpieczenia społecznego, jeden z domyślnych filtrów:

[Format] .REG. \b\d{3}-\d{2}-\d{4}\b

Powyższe wyrażenie wykorzystuje przełącznik \b (znak cofania), następnie przełącznik \d (dowolna cyfra), następnie {x} (liczba cyfr), a na końcu - (łącznik). To wyrażenie powoduje dopasowanie numeru ubezpieczenia społecznego. Następująca tabela opisuje ciągi tekstowe które pasują do przykładowego wyrażenia regularnego:

Tabela 6. Numery pasujące do wyrażenia regularnego numeru ubezpieczenia społecznego

.REG. \b\d{3}-\d{2}-\d{4}\b

333-22-4444

Dopasowanie

333224444

Brak dopasowania

333 22 4444

Brak dopasowania

3333-22-4444

Brak dopasowania

333-22-44444

Brak dopasowania

Jeśli zmienisz wyrażenie następująco,

[Format] .REG. \b\d{3}\x20\d{2}\x20\d{4}\b

to nowe wyrażenie pasować będzie do następującej sekwencji:

333 22 4444