W zakończonym niedawno cyklu trzech artykułów wprowadzających do Google Analytics pisałem o zakładaniu konta, konfiguracji kodu śledzącego i ustawianiu filtrów. Dziś zapraszam do przeczytania wpisu na temat praktycznego zastosowania wyrażeń regularnych, które są nieodzowne przy bardziej niż podstawowym korzystaniu z Google Analytics (i nie tylko).
Czym są wyrażenia regularne?
Wyrażenia regularne służą opisywaniu łańcuchów symboli i definiowaniu zbiorów w tych łańcuchach. Na dzień dzisiejszy praktycznie nie ma języka programowania, który nie posiadałby własnej biblioteki umożliwiającej korzystanie z regexp.
Z tym wiąże się pewna niedogodność – wyrażenia posiadają bowiem dwie popularne składnie: perlową i uniksową. Różnią się od siebie tym, że ta pierwsza jest bardziej rozbudowana. Zainteresowanych niuansami odsyłam do angielskojęzycznej Wikipedii, która zawiera bardzo rozbudowany opis regular expressions. Dodam tylko, że Google Analytics używa tego perlowego, o nazwie Perl Compatible Regular Expressions (PCRE).
Składnia wyrażeń regularnych
Składnia regexów zbudowana jest ze znaków specjalnych, które spełniają określoną funkcję. Ich lista prezentuje się w sposób następujący:
^$\.*+?|()[]i-{}
Suche definicje nie dają się łatwo zapamiętać, więc praktyczne poskramianie wyrażeń regularnych przeprowadzimy na przykładach zastosowania każdego z powyższych operatorów.
^ – kareta
Znak karety określa początek ciągu znaków.
Załóżmy, że chcesz sprawdzić w GA wszystkie słowa kluczowe, które rozpoczynają się od wyrazu SEO. W filtrze raportu dotyczącego słów kluczowych wpisujesz więc wyrażenie, które Ci to umożliwi: ^seo.
$ – dolar
Znak dolara działa odwrotnie do znaku karety, oznacza więc koniec ciągu znaków.
Dla odmiany spróbuj poszukać wszystkich słów kluczowych, które kończą się wyrazem SEO. Dopasujesz je do wyrażenia: seo$.
\ – backslash
Znak odwróconego ukośnika służy do tzw. escape’owania innych znaków specjalnych. Innymi słowy odbiera specjalne zdolności i zmusza interpreter wyrażeń regularnych do traktowania danego znaku jako zwykłego znaku pisanego. Taki komputerowy kryptonit :).
Backslash najczęściej odbiera moce kropce. Nic dziwnego – jest to przecież składowy element tak podstawowych rzeczy jak adres IP czy URL.
Praktyczne zastosowanie tego znaku występuje już na etapie konfiguracji filtrów, to jest przy wykluczaniu odsłon generowanych przez nas samych.
Backslashując kropki w adresie 23\.123\.123\.12 umożliwiasz interpreterowi uzyskanie dopasowania i wykluczenie Twojego IP. Ale tylko z pozoru :).
Taki zapis wykluczy nie tylko Twój adres 23.123.123.12, lecz inne, zawierające go w sobie, czyli:
- 123.123.123.12
- 23.123.123.125
- 23.123.123.120
- 223.123.123.123
I tak dalej. Jest ich w sumie 30!
Aby temu zapobiec, zastosuj dwa znaki specjalne, opisane powyżej. Zmodyfikowane, poprawne wyrażenie wygląda teraz tak: ^23\.123\.123\.12$ – w takiej postaci trafi tylko i wyłącznie jeden adres IP.
. – kropka
Kropka powoduje dopasowanie do jakiegokolwiek pojedynczego znaku.
Wyrażenie .os dopasuje się więc nie tylko do słów:
- los
- nos
- kos
Ale, ponieważ nie określono żadnych dodatkowych reguł, także do nielogicznych ciągów znaków, takich jak:
- 9os
- =os
- ,os
Natomiast nie będzie dopasowania dla dwu-znakowego ciągu os, gdyż wyrażenie wymaga przynajmniej jednego znaku przed literą o.
Używając więc regexa do dopasowania URLa należy pamiętać, że wpisując wyrażenie domena.pl trafiamy więcej niż tylko samą domenę:
- domena.pl
- domenappl
- domena9pl
- domena,pl
Jeśli więc trafienie ma być tylko na URL, należy użyć odrobiny kryptonitu na kropce: domena\.pl.
* – gwiazdka
Gwiazdka oznacza dopasowanie dowolnej ilości powtórzeń elementu ją poprzedzającego (w tym i zerowej ilości powtórzeń).
Powiedzmy, że w Google Analytics chcesz wyeliminować ruch generowany przez Twoich pracowników. Pokazaliśmy już jak to zrobić dla pojedynczego IP, ale przecież Twoja firma jest duża. Tak duża, że dysponuje własnym zakresem IP – od 23.123.123.0 do 23.123.123.255. Wyrażeniem eliminującym każdy z tych adresów jest ^23\.123\.123\..*$ – używamy trzech kropek, lecz tylko ostatnia z nich nie jest pozbawiona swojej mocy, pasuje więc do każdej cyfry. Następująca po niej gwiazdka powoduje dopasowanie do dowolnej ilości kolejnych cyfr.
Oczywiście ten przykład można zapisać inaczej, używając bardziej ścisłego dopasowania, ale nie wszystko na raz :).
+ – plus
Znak plusa działa bardzo podobnie jak gwiazdka, z tą różnicą, że dopasowanie następuje dla jednego lub większej ilości powtórzeń elementu poprzedzającego. Gwiazdka dopuszcza zerową ilość wystąpień, plus nie.
Załóżmy, że chcesz sprawdzić słowa kluczowe, które przyprowadziły użytkowników na Twoją witrynę. Nie chodzi Ci jednak o wszystkie słowa, ale takie, które mają w sobie wyraz google i jego literówki.
Wyrażeniem odpowiednim do tego zadania będzie go+gle. Trafi słowa takie jak gogle, google, goooogle, ale już nie ggle.
? – znak zapytania
Znak zapytania miksuje zdolności gwiazdki i plusa. Dopasowanie następuje dla dokładnie zera lub dokładnie jednego wystąpienia elementu poprzedzającego.
Używając poprzedniego przykładu z poszukiwaniem słów kluczowych, wyrażenie goo?gle zwróci wszystkie zapytania, które mają w sobie gogle lub google.
Inny przykład z numerami IP – załóżmy, że Twoja firma jest duża, ale nie aż tak, żeby mieć 256 unikalnych adresów IP. Macie 10 – od 23.123.123.0 do 23.123.123.9. Wiemy, że użycie kropki i gwiazdki trafi wszystkie, więc aby dopasować tylko te jednocyfrowe używasz wyrażenia ^23\.123\.123\..?$.
Podobnie rzecz miałaby się dla numeru trzycyfrowego: IP od 23.123.123.120 do 23.123.123.129 złapie wyrażenie ^23\.123\.123\.12.?$.
| – pipe (potok)
Bardzo prosty w zrozumieniu znak, oznaczający wyrażenie lub.
Powiedzmy, że ponownie chcesz wyświetlić słowa kluczowe, które zawierają w sobie SEO. Tym razem jednak wyświetlisz zarówno te, które się na tak zaczynają jak i te, które się tak kończą – łącznie.
Dopasujesz je wszystkie wyrażeniem ^seo|seo$.
() – nawiasy okrągłe
Nawiasy okrągłe umożliwiają tworzenie sub-wyrażeń, które następnie są traktowane jako jeden element.
Załóżmy, że na swojej witrynie masz kilka dokumentów w formie raportów i chcesz sprawdzić ile razy je pobrano. Wystarczy, że wpiszesz (raport1|raport2|raport3)\.pdf, gdzie raport1 to nazwa pliku z raportem.
Inny przykład, powiedzmy, że sprzedajesz kredyty i masz kilka stron docelowych, na które sprowadzasz ruch z wyszukiwarki. Chcesz szybko sprawdzić ile było odwiedzin na każdej z tych stron. Wyrażenie, które Ci to umożliwi może wyglądać na przykład tak: kredyt-(hipoteczny|mieszkaniowy|gotowkowy)\.html.
Dzięki nawiasom możemy także inaczej zapisać wcześniej przedstawione filtry na wykluczanie adresów IP.
Filtr wykluczający adresy od 23.123.123.0 do 23.123.123.9 zapisaliśmy wcześniej jako ^23\.123\.123\..?$. Z nawiasami możemy zapisać go tak: ^23\.123\.123\.(0|1|2|3|4|5|6|7|8|9)$.
Upraszcza to sprawę jeśli Twoja firma ma na przykład tylko 3 adresy do wykluczenia: ^23\.123\.123\.(3|4|5)$ wykluczy:
- 23.123.123.3
- 23.123.123.4
- 23.123.123.5
I nic więcej.
Nawiasy świetnie sprawdzają się także gdy szukasz wariacji słów kluczowych. Załóżmy, że interesują Cię wszystkie słowa mające cokolwiek wspólnego z linkami. Nasuwa się wyrażenie podobne do tego: link(u|a|i|ów|ami). Ma ono jednak zasadniczą wadę – w takiej postaci nie trafi żadnego słowa kluczowego, w którym występuje wyraz link :). Drobna modyfikacja umożliwi nie tylko uwzględnienie tego wyrazu, ale także pozwoli zapisać wyrażenie krócej: link(.?|ów|ami).
[] i - czyli nawiasy prostokątne i minus
Nawiasy prostokątne służą do definiowania list elementów, które następnie mają być dopasowane. Minus pomaga skracać listy poprzez określanie pewnych zakresów.
W przedstawionym przed momentem przykładzie z wykluczaniem IP, użyliśmy zapisu (0|1|2|3|4|5|6|7|8|9) aby zdefiniować zakres od 0 do 9. Taki zakres można zapisać krócej przy użyciu nawiasów prostokątnych i minusa: [0-9]. Podobnie litery alfabetu – małe mieszczą się w zakresie [a-z] a duże [A-Z].
Lista elementów nie musi zawsze być zakresem. W przykładzie z listą IP wykluczaliśmy także tylko trzy z nich, kończące się na 3, 4 lub 5. Wyrażenie ^23\.123\.123\.(3|4|5)$ można zapisać jako ^23\.123\.123\.[345]?$.
Szukając słów kluczowych dotyczących linków użyliśmy wyrażenia link(.?|ów|ami) – musimy jednak pamiętać, że niektórzy użytkownicy nie używają polskich liter przy wyszukiwaniu. Aby to uwzględnić, modyfikujemy wyrażenie do następującej postaci link(.?|[óo]?w|ami).
{} nawiasy klamrowe
Ten rodzaj nawiasów zawsze ma dwa parametry liczbowe, rozdzielone przecinkiem: {X,Y}. Definiuje dopasowanie elementu poprzedzającego nie mniej niż X i nie więcej niż Y razy.
Nawiasy klamrowe nie występują w oficjalnej dokumentacji Google Analytics. Nie oznacza to jednak, że nie można ich używać.
Jednym z wyrazów używanych przy wyszukiwaniu przez odwiedzających Magiczne użytkowników jest htaccess. Występują w nim dwie litery c i dwie litery s, więc naturalnie pojawia się kilka interpretacji tego wyrazu:
- htaccess
- htacess
- htaces
- htacces
Aby je wszystkie uwzględnić przy przeglądaniu raportu na temat słów kluczowych korzystamy z dopasowania htac{1,2}es{1,2}.
Powtórzenie określoną ilość razy można stosować nie tylko dla pojedynczych liter, ale także dla zakresów. Pierwszy przykład z wykluczaniem zakresu IP od 23.123.123.0 do 23.123.123.255 wyglądał tak: ^23\.123\.123\..*$. Przy użyciu zakresu liczbowego i nawiasów klamrowych możemy go zapisać w następujący sposób: ^23\.123\.123\.[0-9]{1,3}$. [0-9] definiuje dowolną cyfrę od zera do dziewięciu a {1,3} oznacza jej wystąpienie od 1 do 3 razy.
Ważne na koniec – wyrażenia regularne są zachłanne
Zwane także z angielska greedy. Nastręcza to kłopotu zwłaszcza przy dopasowywaniu celów.
Załóżmy, że chcesz dopasować stronę zamowienie.php – może Cię skusić ustawienie celu jako /zamowienie\.php. W istocie będzie działać. Z tym, że oprócz pożądanej strony cele będą się naliczać przy wyświetlaniu np:
- /anulowane/zamowienie.php
- /zamowienie.php?status=anulowane
- /historia/zamowienie.php
- /old/zamowienie.php3
I tym podobne. Musisz więc dokładnie powiedzieć interpreterowi regexpów gdzie zacząć i gdzie skończyć: ^/zamowienie\.php$.
Zachłanność RegEx niesie ze sobą również korzyści. Powiedzmy, że ścieżki zakupowe na Twojej witrynie różnicują się w momencie wyboru metody płatności:
- /zamowienie/przelew.php
- /zamowienie/karta/visa.php
- /zamowienie/karta/mastercard.php
- /zamowienie/przekaz.php
Konstruując wyrażenie musisz uwzględnić nie tylko różne nazwy plików, ale również fakt, że niektóre z nich znajdują się głębiej w strukturze folderów. Dodatkowo, nie chcesz uwzględniać URI /zamowienie/historia.php. Dopasowanie wygląda więc tak: ^/zamowienie/(przelew|przekaz|karta)(/[a-z]*\.php|\.php)$.
Masz jakieś ulubione triki z wyrażeniami regularnymi? Podziel się nimi w komentarzach. Masz pytanie? Potrzebujesz fachowej pomocy z Google Analytics? Zatrudnij nas.



{ 2 komentarze… przeczytaj je poniżej lub dodaj swój }
Drobna uwaga:
słowo „greedy” zwykło się w IT tłumaczyć jest w języku polskim jako „zachłanne” – nawiązując do algorytmów zachłannych. Niby szczegół, ale właśnie takie drobne przekręcenia w tłumaczeniu dodatkowo utrudniają mało zaawansowanym użytkownikom poruszanie się po, i tak niełatwych dla nich, tematach.
Poprawiłem – dziękuję za zwrócenie uwagi. Kolejny powód do tego, by posługiwać się oryginalnymi, angielskimi nazwami :).