Wykorzystanie wyrażeń regularnych

Facebooktwitterpinterestlinkedinmail
Dotyczy wersji 8.1.x; Autor Maciej Jarzębkowski

Słowem wstępu, czym jest RegEx ? 

Wyrażenia typu RegEx (skrót od Regular Expression) są bardzo precyzyjnym sposobem filtrowania różnego rodzaju dokumentów. Wykorzystuje się je w skryptach, przy filtrowania logów, oraz przy wyborze kilku wartości z list. Często wyszukiwanie wyrażeń regularnych jest dużo szybsze, niż podobny kod napisany w JavaScript.

RegEx to wzorce opisujące łańcuchy symboli, wykorzystywane przy wyszukiwaniu specyficznych ustawień i sekwencji znaków. W WEBCON BPS można je wykorzystać między innymi do filtrowania załączników e-mail w HotMailBoxach.


 

Konfiguracja systemu

W zależności od tego w jaki sposób chcemy kontrolować przepływ maili, możemy zmienić ustawienia dla każdej skrzynki osobno.

Przechodzimy do konfiguracji HotMailBox w Konfiguracji systemu:
pl1

Ustawiamy połączenie z MS Exchange, oraz możemy wskazać dane do połączenia się z wybraną skrzynką. Dla celów testowych użyłem własnej skrzynki.

pl2

 

Warto utworzyć 3 osobne foldery (Źródłowy, Error i Archiwum). W pewnych okolicznościach ich brak może uniemożliwiać prawidłowe działanie, lub doprowadzić do wysyłania maili w sposób rekurencyjny – zapychając skrzynkę.

pl3

 

Następnie przechodzimy do części opisującej tryb działania. Możemy tam wybrać

– Startuj Jeden obieg dla wiadomości email
– Startuj po jednym obiegu dla wybranych załączników
– Dołącz do elementów na podstawie kodów kreskowych w załącznikach
– Dołącz do elementu na podstawie zawartości wiadomości email

Następnie wybieramy, za pomocą wyrażeń RegEx, załączniki mają podlegać przetwarzaniu.

 

 

Podstawy Składni

W każdej z tych części wykorzystujemy składnię RegEx to wyboru załączników. Domyślnie ustawiona wartość „Wszystkie” jest reprezentowana przez wyrażenie:  .*\..* 

Tą, jak się wydaje dość zagmatwaną formułę należy rozszyfrować w następujący sposób:

.   -pojedynczy dowolny znak
*  -oznacza dowolną ilość znaków (także brak znaku)

\. -oznacza dokładnie znak kropki; Jest to wymuszenie, aby przesyłane pliki posiadały jakieś rozszerzenie.

Następnie jest powtórzony ciąg:  .*  wymuszający co najmniej jeden znak rozszerzenia. Co, de facto uniemożliwi odebranie załączonego folderu. W systemach Windows pliki zawsze je posiadają (czasami jest ukrywane w opcjach folderu). Istnieją systemy, które jednak nie wymagają rozszerzenia pliku. Może być to potencjalnie przyczyną błędów.

Zapis RegEx Ciąg Uwagi
Twój tekst Twój Tekst
[a-z] Zakres małych liter
[A-Z] Zakres dużych liter
[0-9] Zakres cyfr
{} Ilość znaków z danego zakresu Np. {2-5,9} daje od 2 do 5 znaków lub 9 znaków
. Zastępuje jeden dowolny znak
* Zastępuje dowolny ciąg znaków (także brak znaku)
+ Zastępuje dowolny ciąg znaków, co najmniej jeden  .*  = + =  ([a-z][A-Z][0-9])

 
Więcej informacji o bardziej skomplikowanych konstrukcjach możemy znaleźć w Internecie. Np. na http://www.regexr.com/ Warto wiedzieć, że możemy tworzyć zapytania, potrafiące zapamiętywać pewne ciągi znaków I ponownie je znajdować z danym przykładzie.  


Przykładowe wyrażenia RegEx

Przykładowy zbiór załączników:

image005.jpg
image008.jpg
image009.jpg
image010.jpg
image011.jpg
Webcon_Some_Mail.eml
2015_09_029_FAKTURA_MULTI.pdf

 

Wyrażenia RegEx są bardzo precyzyjnym sposobem filtrowania różnego rodzaju dokumentów. Często wykorzystywane w skryptach a także do filtrowania logów, oraz wyboru kilku wartości z list.
przykładowe filtry odfiltrują:

image[0-9]{3}\…. Odfiltruje pliki zawierające „image” a następnie 3 dowolne cyfry , dodatkowo przyjmie pliki .png, .gif , jednak odrzuci pliki z rozszerzeniem .jpeg Ponieważ ma 4 znaki po kropce.( \. definiuje dokładnie znak kropki, a   definiuje 3 pojedyncze dowolne znaki. )
image[0-9]{3}\..* Odfiltruje pliki zawierające „image” a następnie 3 dowolne cyfry. Przyjmie pliki z dowolnym rozszerzeniem, posiadającym co najmniej jeden znak.
image[0-9]{3-8}\.+ Odfiltruje pliki zawierające „image” a następnie między 3 a 8 dowolnych cyfr. Przyjmie pliki z dowolnym rozszerzeniem, posiadającym co najmniej jeden znak.
.*\.eml    Odfiltruje wszystkie załączone emaile, niezależnie jakie będą ich nazwy
.*\.pdf Odfiltruje wszystkie załączone pdf-y , niezależnie jakie będą ich nazwy

 

Testy wyrażenia regularnego:

Jednym z wygodniejszych metod testowania skuteczności naszego filtru będzie sprawdzenie go na stronie http://www.regexr.com/ Znajdziemy tam także przykłady np. znajdowania palindromów.
Jeśli wolimy, aby dane, na których operujemy nie wydostały się poza nasz komputer, możemy zapisać je w pliku txt i testować na nich wyrażenia regularne z pomocą Notepad++.

W pewnych przypadkach, te bardzo rozbudowane wyrażenia warto sprawdzić pod kątem zapętleń z wykorzystaniem Microsoft SDL RegEx Fuzzer Jest to narzędzie sprawdzające czy nie wystąpi efekt podobny do ataku DoS (Denial-of-Service) po wywołaniu takiego wyrażenia.


Co jeszcze możemy skonfigurować?

Możemy skonfigurować, z jaką nazwą zostanie dołączona treść emaila.

pl4

Jeśli wybraliśmy w polu Tryb podstawowy „Startuj Jeden obieg dla wiadomości email”, możemy ustawić szablon nazwy dla tworzonych dokumentów. Możemy chcieć, aby zawierał on np. datę i godzinę. Dobrym pomysłem jest aby na końcu zawsze dodawać %FileName%, dzięki temu będziemy mieli pewność, że załącznik będzie miał odpowiednie rozszerzenie.

Jeśli przy startowaniu obiegu zostanie wykryty więcej niż jeden załącznik, możemy go dołączyć do obiegu, lub zwrócić błąd – email zostanie przesłany do folderu (…)/Error – który może być innym hot-folderem. Email w folderze error będzie zawierał wszystkie załączniki.

pl5

 

Ustawienia zaawansowane

Mamy także dostęp od ustawień zaawansowanych. Możemy tu ograniczyć ilość odbiorców, za pomocą źródła danych, np. tylko klientów firmy.

Limit ilości email przetwarzanych dzienne – możemy ustawić, jeśli danego dnia np. informacja o wygranej ma zostać wysłana do 10 (pierwszych) osób.

Limit podczas każdej iteracji – można zmieniać ten parametr, aby wpłynąć na wydajność (np. przy szybkich serwerach można tę wartość podnieść podnieść). Podobnie jak przy startowaniu nowych obiegów – czasem lepiej jest startować mniejszą liczbę, dzięki czemu w serwerach nie zacznie nagle brakować pamięci.

Ilość dni wstecz od daty wysłania maila, po których maile będą ignorowane – np., jeśli maile sprzed miesiąca mają być ignorowane.

Parametry ustawione na zero oznaczają brak ograniczeń.

pl6

Analogicznie, dla różnych trybów  podstawowych możliwe będzie sprecyzowanie działania, oraz schemat postępowania w przypadku nierozpoznania e-maila.

 

Zatwierdzanie zmian. 

Pamiętajmy, o konieczności restartu serwisu po każdorazowej zmianie ustawień, umożliwi to wczytanie i pracę z nowymi zasadami HotMailBoxów.

pl7


Najłatwiej je otworzyć przechodząc: Panel Sterowania -> Narzędzia Administracyjne – > Services.