WYRAŻENIA REGULARNE (REGEX) – CZYM SĄ I JAK MOŻNA ICH UŻYĆ W SAP ABAP?

Wyobraź sobie, że masz przed sobą bibliotekę z milionem książek, wśród których chcesz odnaleźć pięć książek autorstwa Henryka Sienkiewicza. Co zrobisz, jeśli jesteś w prawdziwej bibliotece?

Prawdopodobnie zaczniesz szukać na półce z autorami, których nazwisko zaczyna się na „S”.

Co zrobisz, jeśli lista jest w Excelu?
Prawdopodobnie skorzystasz z możliwości filtrowania kolumny z nazwiskiem autora.

A co zrobisz, jeśli korzystasz z SAP ABAP?
 
W tej sytuacji przydatna jest znajomość wyrażeń regularnych.

WYRAŻENIA REGULARNE (REGEX) – CZYM SĄ I JAK MOŻNA ICH UŻYĆ W SAP ABAP?

Wyobraź sobie, że masz przed sobą bibliotekę z milionem książek, wśród których chcesz odnaleźć pięć książek autorstwa Henryka Sienkiewicza. Co zrobisz, jeśli jesteś w prawdziwej bibliotece?

Prawdopodobnie zaczniesz szukać na półce z autorami, których nazwisko zaczyna się na „S”.

Co zrobisz, jeśli lista jest w Excelu?
Prawdopodobnie skorzystasz z możliwości filtrowania kolumny z nazwiskiem autora.

A co zrobisz, jeśli korzystasz z SAP ABAP?
 
W tej sytuacji przydatna jest znajomość wyrażeń regularnych.

Wyrażenia regularne

– czym są i jak działają?

Wyrażenia regularne (często nazywane regex od angielskiej nazwy regular expression) to narzędzia, które służą do dopasowywania wzorców. Dopasowywania wzorców, czyli rozpoznawania zgodności z podanym schematem.

W jaki sposób to działa?

Powróćmy do przykładu z książkami Henryka Sienkiewicza. W tym przypadku wzorcem będzie „Sienkiewicz”. Co więc się stanie, gdy trzeba go będzie rozpoznać w ciągu:

Mickiewicz Singer Sienkiewiczowa Sienkiewicz?

Mechanizm rozpoczyna od porównania wzorca „Sienkiewicz” z „Mickiewicz”. Porównując jednak „S” z „M” okazuje się, że słowo to nie pasuje – przechodzi więc do kolejnego.

W tej sytuacji pierwsza litera się zgadza – zarówno „Singer”, jak i „Sienkiewicz” zaczynają się na „S”, mechanizm analizuje więc drugą pozycję – tu także w obu przypadkach znajduje się „i”. Analizując jednak trzecią literę okazuje się, że „Singer” nie pasuje do wzorca, ponieważ „n” nie pasuje do wzorcowego „e”.

Co się dzieje w przypadku słowa „Sienkiewiczowa”? Jak łatwo się domyślić, przez pierwszych 11 liter mechanizm zauważa zgodność ze wzorcem. Ostatnim elementem wzorca jest jednak jego koniec – w tym przypadku po „Sienkiewicz” powinna nastąpić spacja, co nie następuje w przypadku „Sienkiewiczowej”, w związku z czym zostaje ona odrzucona.

Ostatnie słowo ciągu – Sienkiewicz – jest zgodne (i równoznaczne) ze wzorcem, w związku z czym zostaje zaakceptowane przez mechanizm.

Wyrażenia regularne to jednak nie tylko rozpoznawanie liter

Powyższe przykłady są podstawowymi przykładami wyrażeń regularnych, ponieważ pozwalają na znalezienie jedynie tych wzorców, które zapisujemy w dokładnie ten sam sposób (wzorzec traktowany jest literalnie; korzystamy w tym przypadku ze znaków zwyczajnych). SAP ABAP (a także większość języków programowania) pozwala na korzystanie z wyrażeń regularnych także wtedy, gdy szukamy bardziej ogólnych wzorców. W tej sytuacji przydatna jest znajomość metaznaków.   

Metaznaki, w odróżnieniu od znaków zwyczajnych, nie są traktowane dosłownie, za to wpływają na zaakceptowanie wyrazu do wzorca (dodając dodatkowe obostrzenia, które dany znak musi spełniać, by był dopasowany do wzorca). Poniżej znajduje się lista wybranych metaznaków obsługiwanych przez SAP ABAP oraz przykłady ich użycia:

Metaznak Wytłumaczenie Przykład
. Odpowiada dowolnemu pojedynczemu znakowi Do S. będzie dopasowane zarówno SN, jak i S2
? Odpowiada 0 lub 1 wystąpieniu Do S?I będą dopasowane SI oraz I
* Odpowiada 0 lub większej liczbie wystąpień Do S*I będą dopasowane np. SI, SSI, I, SSSI
+ Odpowiada 1 lub większej liczbie wystąpień Do S+I będą dopasowane np. SI, SSI, SSSI
\d Odpowiada dowolnej cyfrze (0-9) Do \d\d\d będą dopasowane np. 123 oraz 987
\D Negacja \d – odpowiada każdemu znakowi, który nie jest cyfrą Do \D\D\d będzie dopasowane np. Si3, lecz nie S22
\u Odpowiada dowolnej dużej literze alfabetu Do \u\d będzie dopasowane np. S2, lecz nie s2
\U Negacja \u – odpowiada każdemu znakowi, który nie jest dużą literą Do \u\U będzie dopasowane np. Si, lecz nie SI
^ Negacja Do [^d] będzie dopasowane np. a lub b, lecz nie 2
{} Wskazuje, ile razy ma wystąpić dany znak Do \d{3} pasuje np. 123 oraz 987

Wyrażenia regularne w SAP ABAP

SAP ABAP umożliwia korzystanie z funkcjonalności wyrażeń regularnych zgodnie ze standardem POSIX.

Najczęściej wyrażenia regularne wykorzystuje się wtedy, gdy chcemy znaleźć określone wyrażenie dopasowane do wzorca lub je zamienić – odbywa się to przy użyciu funkcji FIND i REPLACE i dodaniu REGEX.

Wyrażeń regularnych można użyć także jako argumenty w następujących funkcjach:

Jak to wygląda w praktyce? Wróćmy do naszego przykładu z biblioteką. Wiesz, że sygnatura książek Henryka Sienkiewicza rozpoczyna się od 345 i ten numer chcesz odnaleźć; część sygnatur została jednak źle zapisana i zawiera także litery – np. SYG345 czy SIEN345. W tej sytuacji chcemy usunąć wszystkie elementy, które nie są cyframi (czyli zastąpić je pustym polem). Możemy zatem skorzystać z funkcji REPLACE i REGEX:

REPLACE ALL OCCURRENCES OF REGEX '([^\d])’
   IN BOOK_SIGN WITH ”.

Jeśli chcesz sprawdzić, jak działają przygotowane przez Ciebie wyrażenia regularne, możesz wypróbować je w programie DEMO_REGEX_TOY lub innym testerze do sprawdzania wyrażeń regularnych (np. http://regexp.pl/ ).

Podsumowanie

Wyrażenia regularne pozwalają zaoszczędzić sporo czasu w wyszukiwaniu i zastępowaniu interesujących nas wzorców. Dzięki nim w łatwy sposób odnajdziemy adresy e-mail, numery PESEL czy też książki Henryka Sienkiewicza.