Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Podobne dokumenty
Systemy operacyjne. Laboratorium 6. Awk wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Systemy operacyjne. Laboratorium 8. Perl find

Systemy operacyjne. Laboratorium 7. Perl podstawy. Jarosław Rudy Politechnika Wrocławska 27 kwietnia 2017

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Języki formalne i automaty Ćwiczenia 6

Systemy operacyjne. Laboratorium 5. Awk podstawy. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Zakład Systemów Rozproszonych

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

J ezyk AWK Kurs systemu UNIX

2. Łańcuchy tekstowe w PHP

Formatowanie tekstu za pomocą zdefiniowanych stylów. Włączanie okna stylów. 1. zaznaczyć tekst, który chcemy formatować

Wprowadzenie do maszyny Turinga

Podstawy JavaScript ćwiczenia

Wskaźniki w C. Anna Gogolińska

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

System operacyjny Linux

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Informatyka II. Laboratorium Aplikacja okienkowa

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Lab 9 Podstawy Programowania

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Języki programowania zasady ich tworzenia

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

MATLAB tworzenie własnych funkcji

Zajęcia 5 łańcuchy znaków (ciąg dalszy) i funkcje

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wykład 8: klasy cz. 4

Oczywiście plik musi mieć rozszerzenie *.php

IX. Wskaźniki.(3 godz.)

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Trochę o plikach wsadowych (Windows)

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wstęp do programowania. Wykład 1

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Język C, tablice i funkcje (laboratorium, EE1-DI)

Wyrażenia regularne. Wyrażenia regularne 1/41

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Języki i techniki programowania Ćwiczenia 2

Narzędzia informatyczne w językoznawstwie

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

W dowolnym momencie można zmienić typ wskaźnika.

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

Atrybuty bloki z atrybutami, wyciągi atrybutów.

Wykład 5: Klasy cz. 3

Podstawy programowania skrót z wykładów:

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki programowania obiektowego Nieobiektowe elementy języka C++

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

EDYTOR TEKSTOWY VIM WYBRANE POLECENIA. Pracownia Informatyczna 5

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Numeracja dla rejestrów zewnętrznych

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do Informatyki dla bioinformatyków

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Moduł Usprawiedliwiania

Narzędzia informatyczne w językoznawstwie

Zad. 3: Układ równań liniowych

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Kadry Optivum, Płace Optivum

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Zapis algorytmów: schematy blokowe i pseudokod 1

Konspekt zajęć dotyczących kwerend

Programowanie w języku Python. Grażyna Koba

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Techniki wstawiania tabel

NOWY SZABLON IMPORTU PLIKÓW

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Systemy operacyjne. Laboratorium 3. Find. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wykład 2 Składnia języka C# (cz. 1)

PRZELICZANIE JEDNOSTEK MIAR

Podstawy Programowania C++

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

NOWY SZABLON IMPORTU PLIKÓW

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2

FUNKCJE TEKSTOWE W MS EXCEL

11. PROFESJONALNE ZABEZPIECZENIE HASŁEM

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

29. Poprawność składniowa i strukturalna dokumentu XML

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Transkrypt:

Systemy operacyjne Laboratorium 9 Perl wyrażenia regularne Jarosław Rudy Politechnika Wrocławska 28 lutego 2017 Temat obejmuje wykorzystanie wyrażeń regularnych w perlu. Wyrażenia same w sobie są w zasadzie identyczne do tych wykorzystanych w przypadku awka. W przypadku perla nie powinno być jednak problemów z niektórymi rodzajami regexów. Ponadto, regexy w perlu oferują więcej możliwości. W związku z tym poniższa instrukcja obejmuje głównie sposoby stosowania regexów w perlu. 1 Rekordy, pola i separatory W instrukcji do laboratorium 7 omówiono separatory wyjściowe $\ oraz $,, które są tekstem. Separatorem wejściowym jest $/, który TAKŻE jest tekstem, a nie regexem. Jest to istotna różnica w stosunku do awka. Jak wspomniano na poprzednim laboratorium, w perl rekord wczytywany jest wraz z jego sepratorem. Aby wyciąć separator z końca rekordu należy użyć funkcji chomp próbuje ona usunąć z końca podanego argumentu to co aktualnie zapisane jest w $/. Perl domyślnie nie dzieli rekordu na pola, można jednak w tym przypadku posłużyć się funkcją split, która podzieli tekst zgodnie z podanym regexem. Funkcja split zwraca LISTĘ słów po podziale (kontekst listy/tablicy) lub LICZBĘ słów (kontekst skalarny). 2 Match Podstawowe użycie regexów w perlu dotyczy operatorów dopasowania (match, m), podstawiania (substitute, s) oraz transliteracji (transliteration, tr, y). Bazowa składnia operatora match jest następująca: $tekst = m/regex/opcje 1

Powyższy kod spróbuje znaleźć tekst dany regexem wewnątrz zmiennej $tekst. Opcje są zawsze pojedynczymi literami (ale może być więcej niż jedna opcja naraz). Przykładowo, opcja 'i' sprawia, że dopasowanie nie rozróżnia małych i wielkich liter. Ważną opcją jest 'g' (global), która sprawia, że match spróbuje dopasować się wielokrotnie wewnątrz tego samego tekstu. Oprócz zwykłego = dostępna jest także wersja!, która odwraca wynik matcha: $tekst! m/regex/opcje Przejdziemy teraz do nieco bardziej skomplikowanego aspektu matcha, czyli określania jego wyniku. Jeśli chcemy zapisać wynik matcha do zmiennej, to oczywiście używamy operatora przypisania, ale potrzebna jest nowa zmienna (np. $wynik): $wynik = $tekst = m/regex/opcje Podobieństwo operatorów = oraz = czyni ten zapis nieco dziwnym. Dodajmy do tego fakt, że dosyć łatwo w perlu wykorzystać zawartość zmiennej jako regex: $regex = ''jakis regex''; $wynik = $tekst = m/$regex/ Widzimy więc tutaj TRZY zmienne. Nie należy ich ze sobą mylić! Zanim przejdziemy dalej, zauważmy, że możemy użyć // zamiast m//: $tekst = /regex/opcje Jeśli używamy zmiennej jako regexa i nie stosujemy opcji, to możliwe jest nawet prostsze: $tekst = $regex Przejdźmy teraz do określenia jaki wynik operator match w zasadzie zwraca. Jeśli dopasowanie się NIE udało, to otrzymamy PUSTY TEKST (kontekst skalarny) lub PUSTĄ LISTĘ (kontekst listy). Jeśli dopasowanie się UDAŁO, to w kontekście skalarnym zawsze otrzymamy liczbę 1. Z kolei wynik UDANEGO matcha w kontekście listowym jest zależne od tego czy w naszym regexie zdefiniowaliśmy grupy (podwyrażenia) z użyciem nawiasów okrągłych oraz od tego, czy użyliśmy opcji 'g'. Możliwe są 4 przypadki 1 : Grupy: nie, global: nie. Wtedy match zwraca listę zawierającą jeden element, którym jest liczba 1. Grupy: tak, global: nie. Jeśli zdefiniowano K grup, to wtedy match zwraca listę (tablicę) K elementów, zaś i-ty element zawiera to co dopasowało się do i-tej grupy. Zauważmy, że rozmiar tej listy jest zawsze 1. Grupy: nie, global: tak. Jeśli udało się dopasować regex N razy, to wtedy match zwraca listę N elementów, zaś i-ty element zawiera i-te dopasowanie. Ponownie rozmiar listy jest zawsze 1. 1 Przykład można znaleźć na stronie. 2

Grupy: tak, global: tak. Połączenie dwóch powyższych trybów. Jeśli zdefiniowaliśmy K grup, a dopasowanie nastąpiło N razy, to otrzymamy listę o liczbie elementów równej N K. Pierwsze K elementów listy zawiera to co dopasowało się do grup w pierwszym dopasowaniu, następne K elementów zawiera grupy z drugiego dopasowania itp. Przy okazji jeśli definiujemy regex w zmiennej, to należy zwracać uwagę na odpowiednią liczbę odwrotnych ukośników, gdyż, podobnie jak dla awka, występują tu dwa poziomy interpretacji (poziom łańcucha tekstowego i poziom regexa). Należy jeszcze zauważyć, że po wykonaniu matcha zmienne $1, $2 itp. zostaną ustawione na to co dopasowało się do danej grupy (nawiasu). Należy zauważyć, że jeśli użyliśmy opcji 'g' i, przykładowo, wystąpiły 3 dopasowania, to zmienne typu $1 będą dotyczyły tylko ostatniego zestawu (tzn. ostatnie K elementów w N K-elementowej liście). Ostatnia uwaga skrócona wersja match (bez 'm') używa tylko ukośników, ale dla wersji z 'm' możliwe są inne ograniczniki. Np. zamiast: $tekst = m/regex/opcje możemy użyć: $tekst = m regex opcje Jest to szczególnie przydatne, jeśli lewy ukośnik często występuje w naszym regexie. Większość znaków specjalnych działa w ten sposób. Znaki w stylu nawiasów OTWIERAJĄCYCH muszą być zamykane przez swoje ZAMYKAJĄCE odpowiedniki: a nie: $tekst = m(regex)opcje $tekst = m(regex(opcje Nawiasy zamykające działają normalnie : a nie: $tekst = m)regex)opcje $tekst = m)regex(opcje 3 Podstawianie Operator podstawiania ma następującą składnię: $tekst = s/regex/zast/opcje Jest więc podobnie do matcha, ale występuje 's' zamiast 'm', nie ma wersji skróconej (bez 's'), ale dalej możemy stosować inne ograniczniki: 3

$tekst = s regex zast opcje Widzimy też, że podstawianie ma dodatkowy człon zast, który określa jaki tekst należy wstawić w zmiennej $tekst w miejsce, w którym nastąpiło dopasowanie do regexa. Ten dodatkowy człon sprawia, że ograniczniki z nawiasami otwartymi przybierają formę: $tekst = s(regex)(zast)opcje Zauważmy też, że zast jest od razu traktowany jako tekst (chyba, że np. zaczyna się od dolara, co oznacza wstawienie wartości ze zmiennej), więc nie należy wstawiać naokoło niego cudzysłowów. Uwagi dotyczące tego w czym podstawiamy ($tekst) oraz tego w czym zapisujemy wynik ($wynik) są podobne jak dla matcha. Normalnie podstawiamy tylko pierwsze dopasowanie, chyba, że użyto opcji 'g' wtedy wykona się tyle podstawień, ile wykryto dopasowań. Normalnie podstawianie jest niszczące tzn. podstawienie zmienia tekst zawarty w $tekst. W takim trybie operator zwraca liczbę dokonanych podstawień. Jeśli jednak podanie zostanie opcja 'r', to oryginalna zmienna $tekst pozostaje nienaruszona, a operator zwraca tekst po podstawieniu. Bez opcji 'r' operator zachowuje się więc jak awkowy (g)sub, zaś z tą opcją zachowuje się jak awkowy gensub. Zmienne $1, $2 itp. zawierają tekst, który dopasował się do poszczególnych grup. Zmienne te są ustawione po wykononaniu dopasowania, ale PRZED samym podstawieniem, można więc je bezpiecznie użyć w członie zast. Tak więc poniższe wywołanie: $tekst = s/([0-9]+)/$1.00/g zastąpi w $tekst wszystkie liczby całkowite z postaci X na X.00. Zamiast zmiennych $N możemy użyć formy \N, ale wtedy jesteśmy ograniczeni do N 9. 4 Transliteracja Transliteracja działa podobnie do komendy tr. Bazowa składnia jest następująca: lub $tekst = tr/pierwszy/drugi/opcje $tekst = y/pierwszy/drugi/opcje Operator zamienia znaki ze zbioru pierwszy na odpowiednie znaki ze zbioru drugi. Aby zamienić w danym tekście cyfry (nie liczby!) na znaki gwiazdki wystarczy użyć: 4

$tekst = tr/0123456789/**********/ lub $tekst = y/0123456789/**********/ Jeśli drugi zbiór ma za mało znaków, to ostatni znak tego zbioru będzie dotyczył pozostałych znaków ze zbioru pierwszy. Oznacza to, że powyższy przykład można równie dobrze napisać jako: $tekst = tr/0123456789/*/opcje Podobnie jak w regexach możemy definiować zasięg zbioru, co jeszcze bardziej upraszcza ten sam przykład: $tekst = tr/0-9/*/opcje Opcja 'r' działa podobnie jak dla podstawiania jeśli jej nie podamy, to transliteracja modyfikuje dany tekst i zwraca liczbę zmienionych (lub usuniętych, patrz dalej) znaków. Z tą opcją transliteracja zwraca tekst po zmianie, a oryginał nie jest zmieniany. Opcja 'c' sprawia, że zbiór pierwszy zawiera wszystkie znaki, których w nim NIE podaliśmy, tak więc wywołanie: $tekst = tr/0-9/*/c zamieni w gwiazdki wszystko poza cyframi. Opcja 'd', sprawia, że znaki ze zbioru pierwszy, dla których nie ma dopasowania zostaną usunięte. Tak więc: $tekst = tr/0-9/*/d zamieni wszystkie zera w gwiazdki oraz usunie pozostałe cyfry. 5