Wprowadzenie do wyrażeń regularnych

Silnik wyrażeń regularnych jest jednym z najpotężniejszych narzędzi, w jakie wyposażony został pakiet LibreOffice. W artykule znajduje się wszystko, co musisz wiedzieć, aby zacząć z niego korzystać.

Czym są wyrażenia regularne?

Na potrzeby niniejszego artykułu przyjmiemy, iż wyrażenia regularne to specjalne symbole umożliwiające odnalezienie różnych (odmiennych) fragmentów tekstu za pomocą jednego tylko zapytania.

Bardziej dociekliwi czytelnicy powinni wiedzieć, iż takie postawienie sprawy jest pewnym uproszczeniem. W rzeczywistości zwrotu „wyrażenia regularne” powszechnie używa się na określenie zarówno samych znaczników, konkretnej frazy je zawierającej, jak i funkcji wbudowanej w program; zazwyczaj dokładne znaczenie wynika wprost z kontekstu zdania, w którym zwrot ten występuje.

Dla celów praktycznych wystarczy zapamiętać, że gdy mowa o wyrażeniach regularnych, to chodzi o bardzo wszechstronny sposób poszukiwania fragmentów tekstu.

Dlaczego warto używać wyrażeń regularnych?

Najważniejsze powody są dwa.

Po pierwsze, umożliwiają odnalezienie w tekście fragmentów różnych, ale posiadających pewne wspólne cechy. Możemy np. przejrzeć jedynie te zwroty ujęte w cudzysłów, po których nie występuje przypis bibliograficzny.

Po drugie, pozwalają masowo zamieniać jedynie część odnalezionej frazy. Sztandarowym przykładem jest umieszczanie niełamliwej spacji za tzw. sierotkami, czyli jednoliterowymi wyrazami (i, z, w itp.).

Ogólnie rzecz ujmując, wyrażenia regularne przyśpieszają pracę oraz gwarantują otrzymanie spójnych wynikówmniejszą liczbę pomyłek. Są więc niezbędnym elementem wyposażenia każdego, komu zależy na biegłości w tworzeniu i edytowaniu dokumentów.

Jak włączyć obsługę wyrażeń regularnych?

Aby móc używać wyrażeń regularnych podczas przeszukiwania dokumentu, musimy otworzyć okno Znajdź i zamień (EdycjaZnajdź i zamień... lub skrót klawiaturowy Ctrl + H), wcisnąć Więcej opcji i zaznaczyć pole wyboru Wyrażenie regularne.

Wyrażeń regularnych możemy także używać w niektórych formułach tekstowych programu Calc. Aby włączyć ich obsługę, otwieramy opcje pakietu (NarzędziaOpcje...) i w drzewku LibreOffice Calc wybieramy Oblicz. Następnie zaznaczamy pole Włącz wyrażenia regularne w formułach.

Niektóre symbole wyrażeń regularnych

Czas najwyższy przejść do tego, co tygryski lubią najbardziej, czyli samych wyrażeń regularnych.

Lista podstawowych symboli znajduje się poniżej. Nie jest ona wyczerpująca — pominąłem zarówno symbole rzadziej używane (na razie nie warto zaprzątać sobie nimi głowy), jak i bardziej zaawansowane (zasługują one na osobne artykuły). Pełny wykaz symboli oraz ich opis (w języku angielskim) znajduje się na stronie projektu ICU.

Uwaga! Poniższa lista odnosi się do LibreOffice 4.0 i nowszych. Wcześniejsze wersje pakietu dysponowały autorskim, znacznie mniej rozbudowanym silnikiem wyrażeń regularnych. Wykaz obsługiwanych przez niego symboli i ich opis znajduje się w pomocy programu.

Symbole dopasowania

Są to podstawowe symbole, które zastępują jeden lub kilka znaków.

Symbol Znaczenie
. (kropka) Dowolny znak.
\w Znak występujący w słowach (wszystkie litery, cyfry, podkreślenie (_)).
\d Cyfra (0-9).
\s Znak niedrukowalny (różne rodzaje spacji, tabulator i twardy podział wiersza (Shift + Enter)).
\t Tabulator.
\n Twardy podział strony (Shift + Enter).
\uHHHH Znak o numerze HHHH w standardzie Unicode (np. „a” to \u0061).
\x{HHHH} Znak o numerze HHHH w standardzie Unicode, z możliwością pominięcia początkowych zer.
\uHHHH a \x{HHHH} Różnica między tymi dwoma sposobami zapisu jest dość subtelna. Pierwszy z nich wymaga dokładnie czterech cyfr, podczas gdy drugi przyjmuje od dwóch do sześciu cyfr. Innymi słowy, drugi dopuszcza pominięcie początkowych zer. Literę „a” można zapisać jako \u0061, \x{61} lub \x{0061}.
\b Pozycja pomiędzy znakiem „słownym” a „niesłownym”.
^ (kareta, „daszek”) Pozycja początku akapitu.
$ (dolar) Pozycja końca akapitu.
\ (odwrócony ukośnik) Znak cytowania. Powoduje, iż następujący po nim symbol wyrażenia regularnego utraci swoje specjalne znaczenie.

Zakresy

Określają zbiór znaków, z których dowolny (ale tylko jeden) może wystąpić na danej pozycji. Niektóre z nich mają swoje skrócone odpowiedniki na liście symboli dopasowania.

Symbol Znaczenie
[abc] Dowolny ze znaków ujętych w nawias (w tym przypadku: a lub b lub c).
[^abc] Negacja zakresu; cokolwiek, oprócz znaków ujętych w nawias.
[a-z] Dowolny ze znaków pomiędzy symbolami granicznymi, wraz z nimi. Decyduje kolejność znaków w standardzie Unicode (wbrew naszej intuicji, [a-ż] zawiera symbol ®, ale nie zawiera ǎ).
[[:alnum:]] Dowolna litera lub cyfra.
[[:alpha:]] Dowolna litera.
[[:digit:]] Dowolna cyfra.
[[:punct:]] Dowolny znak interpunkcyjny lub jeden z wybranych innych symboli (np. nawiasy klamrowe, ale już nie znak dodawania).
[[:graph:]] Dowolny znak drukowalny (wszystko oprócz odstępów).
[[:space:]] Dowolny znak niedrukowalny (odstęp).

Grupowanie i odwołania wsteczne

Zgrupowanie fragmentu jest konieczne do wykorzystania niektórych funkcji opisanych poniżej (np. alternatywy w ramach wyrazu). Szczegółowo zajmiemy się tym w następnym artykule.

Przy pomocy odwołania wstecznego możemy odnaleźć lub wstawić wcześniej zgrupowany fragment tekstu. Chociaż brzmi to niepozornie, jest to jedna z najpotężniejszych funkcji wyrażeń regularnych. Usuwanie powtórzeń z treści dokumentu jest tylko dość banalnym przykładem możliwości, które się dzięki temu przed nami otwierają.

Symbol Znaczenie
() (nawiasy zwyczajne) Przechwytujące grupowanie fragmentu dopasowanego wyrażenia.
(?:) Nieprzechwytujące grupowanie fragmentu dopasowanego wyrażenia.
\N Odwołanie wsteczne do N-tego przechwyconego zgrupowanego fragmentu; działa tylko w polu Szukaj.
$N Odwołanie wsteczne do N-tego przechwyconego zgrupowanego fragmentu; działa tylko w polu Zamień na.

Modyfikatory liczby dopasowań

Symbole te same w sobie nic nie zastępują, ale wpływają na zakres dopasowania wyrażenia przed nimi.

Symbol Znaczenie
* (asterysk, „gwiazdka”) Zero lub więcej razy; dowolną liczbę razy.
+ (znak dodawania) Jeden lub więcej razy.
? (znak zapytania) Zero lub jeden raz.
{n} Dokładnie n razy.
{n,} n lub więcej razy.
{n,m} Więcej niż n, ale mniej niż m razy (włącznie).

Znak alternatywy

Pionowa kreska (|) jest znakiem alternatywy. Dzięki temu dwa wyrażenia połączone zostają spójnikiem ALBO.

Dla przykładu, wyrażenie regularne kota|psa|żółwia zastępuje wyraz „kota”, „psa” lub „żółwia”. O znaku alternatywy można więc myśleć jak o zakresie dla wyrażeń złożonych z więcej niż jednego znaku.

Wykorzystując zgrupowanie, ograniczyć możemy zakres obowiązywania alternatywy. Przypuśćmy, że chcemy znaleźć wyraz „telefon” lub „telewizor”. Wyrażenie regularne telefon|wizor nie spełni naszych oczekiwań, gdyż oznacza „»telefon« lub »wizor«”. Odpowiednie natomiast będzie wyrażenie tele(fon|wizor).

Najważniejsze koncepcje

Podsumowując powyższą tabelę, podczas pracy z wyrażeniami regularnymi trzeba pamiętać o kilku kwestiach.

Raz, nie wszystkie symbole zastępują wpisane znaki. Należą do nich \b, ^ czy $, które teoretycznie występują w tekście, ale sami ich nie wprowadzamy.

Dwa, w trybie wyszukiwania przy pomocy wyrażeń regularnych wszystkie podane w tabeli symbole mają specjalne znaczenie. Tymczasem niektóre z nich bywają stosowane w zwykłym tekście, co może prowadzić do niezamierzonych efektów. Aby im zapobiec, wyrażenia regularne należy zacytować (ang. escape), czyli poprzedzić znakiem odwróconego ukośnika (\); np. aby znaleźć pojedynczy znak zapytania, należy użyć wyrażenia \?.

Trzy, wszystkie podane powyżej modyfikatory liczby dopasowań są zachłanne (ang. greedy). Oznacza to, że obejmą swoim zasięgiem tak dużo znaków, jak to tylko możliwe. Dla przykładu weźmy tekst „tak” albo „nie”. Wyrażenie regularne „.*” obejmie go w całości.

Aby włączyć dopasowanie niezachłanne (ang. non-greedy), należy umieścić znak zapytania po modyfikatorze liczby dopasowań. W przypadku powyższego tekstu wyrażenie regularne „.*?” obejmie fragmenty „tak” oraz „nie”.

Przykłady

Drugi artykuł wprowadzający w wyrażenia regularne zawiera ich przykłady wraz z opisem działania.

Dodatkowo na blogu działa kategoria Wyrażenia regularne. Gromadzi ona artykuły omawiające poszczególne przypadki zastosowania tej funkcji programu.

Zakończenie

Wyrażenia regularne są potężnym narzędziem, dzięki któremu możemy tworzyć dokumenty szybciej i wygodniej, zaś efekty będą bardziej spójne i pozbawione większości błędów. Z tych powodów warto poświęcić czas na opanowanie przynajmniej podstaw pracy z nimi.

Pomóc w tym mogą dwie niezwykle przydate strony internetowe. RegExr pozwala sprawdzić działanie dowolnego wyrażenia regularnego na wybranym tekście. Natychmiast podświetla dopasowane fragmenty oraz pokazuje zawartość kolejnych grup (o ile są obecne). Regular-Expressions.info stanowi wyczerpujący zbiór informacji o wyrażeniach regularnych i różnych ich implementacjach; niestety, korzystanie z niego wymaga znajomości języka angielskiego.

Podobał Ci się ten artykuł? Zapisz się na listę subskrybentów i otrzymuj informacje o następnych

komentarze 3

  • Izabela pisze:

    Dzień dobry,

    Bardzo ciekawy artykuł. Długo szukałam podstawowych wiadomości na temat wyrażeń regularnych. Zajmuję się narzędziami CAT w pracy tłumacza i polecam artykuł.

    Pozdrawiam,
    Izabela M

  • Jakub pisze:

    Witam
    Jak wyszukać i zamienić | (pionowa kreska) w calcu na ‚ ?
    Nie chce mi tego w ogóle odnajdywać.

  • adam perlakowski pisze:

    jak zamienić więcej niż dwa entery (to chyba znak $) na maksymalnie dwa entery?