Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

Podobne dokumenty
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

ZMIENNE. Podstawy PHP

Celem tego projektu jest stworzenie

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Operatory logiczne. Podstawowe operatory logiczne, składanie wyrażeń z użyciem operatorów logicznych

Wstęp do Informatyki dla bioinformatyków

Czym są właściwości. Poprawne projektowanie klas

Baza danych do przechowywania użytkowników

Oczywiście plik musi mieć rozszerzenie *.php

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

1 Podstawy c++ w pigułce.

Instrukcja warunkowa i złoŝona.

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

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

4. Funkcje. Przykłady

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

Operacje na ciągach. Łączenie ciągów

Typy, klasy typów, składnie w funkcji

Podstawy Programowania Podstawowa składnia języka C++

Czym jest całka? Całkowanie numeryczne

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

PHP: bloki kodu, tablice, obiekty i formularze

Grafika PHP dla początkujących

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Kiedy i czy konieczne?

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Programowanie w języku Python. Grażyna Koba

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

Odczyt danych z klawiatury Operatory w Javie

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Języki formalne i automaty Ćwiczenia 6

Definiowanie języka przez wyrażenie regularne(wr)

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Cw.12 JAVAScript w dokumentach HTML

Tworzenie dokumentów oraz prezentacji programu Młodzi Aktywiści Prezydencji przy wykorzystaniu EduTuby

1 Podstawy c++ w pigułce.

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

Wyrażenia regularne. Regular expressions. aka. Regexp

Funkcje wyszukiwania i adresu PODAJ.POZYCJĘ

Lekcja 5 - PROGRAMOWANIE NOWICJUSZ

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

Jak napisać listę jednokierunkową?

Bazy Danych i Usługi Sieciowe

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Ćwiczenie 8. Kontrolki serwerowe

14. POZOSTAŁE CIEKAWE FUNKCJE

Dokumentacja techniczna SMS MO

Informatyka II. Laboratorium Aplikacja okienkowa

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Podstawy i języki programowania

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

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Programowanie w języku C++ Grażyna Koba

Struktura pliku projektu Console Application

Umieszczanie kodu. kod skryptu

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Konfiguracja programu pocztowego Outlook Express do pracy w sieci NEO.pl

ABC poczty elektronicznej

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

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Zapisywanie w wybranej notacji algorytmów z warunkami i iteracyjnych

Projekt 4: Programowanie w logice

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

dr inż. Jarosław Forenc

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

1. Uruchom stronię poczta.foof.pl (pisane bez www). Powinien wyświetlić się następujący ekran

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

QR code. Ramka składa się z następujących części: typ, liczba znaków, dane, terminator, dopełnienie do oktetu, dopełnienie do ramki.

Testowanie elementów programowalnych w systemie informatycznym

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Liczby losowe i pętla while w języku Python

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

SZKOŁA PODSTAWOWA NR 1 W LUBARTOWIE. Równania

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Jak posługiwać się edytorem treści

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

WYGENEROWANIE NOWEGO HASŁA DO SYSTEMU NA ADRES skrócona instrukcja

Jak ustawić cele kampanii?

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

3. Instrukcje warunkowe

Transkrypt:

Wyrażenia regularne pełnią istotną rolę w PHP. Umożliwiają one opisywanie i przetwarzanie długich ciągów znaków. Dzieje się to na zasadzie porównania danego ciągu znaków z określonym wzorem, ułożonym przez programistę. Czym są wyrażenia regularne? Wyrażenia regularne to bardzo przydatne narzędzie istniejące nie tylko w języku PHP (na którym dziś się skupimy). Dzięki nim, możliwe jest wykonanie wielu operacji na raz np. wyszukiwanie określonych elementów, walidacja adresów email, walidacja adresów URL oraz zamiana poszczególnych fragmentów strony. Zadaniem programisty jest zaprojektowanie określonego wzorcu (ang. pattern). Następnie odpowiednie funkcje wyrażeń regularnych próbują dopasować do niego tekst. W artykule opiszę proces projektowania wzorców, które będziesz mógł następnie użyć w odpowiednich funkcjach wyrażeń regularnych. Operatory wyrażeń regularnych Operator Opis Stronność ^ Operator początku ciągu znaków. prawostronny $ Operator końca ciągu znaków. lewostronny. Operator jednego dowolnego znaku. n/d [a-z] Dowolne litery od a do z. n/d [A-Z] Dowolne litery od A do Z. n/d [0-9] Dowolne cyfry od 0 do 9. n/d [^ ] Operator negacji zbioru. n/d * Operator powtórzenia 0 lub więcej razy. lewostronny + Operator powtórzenia 1 lub więcej razy. lewostronny? Operator powtórzenia 1 lub 0 razy. lewostronny Operator alternatywy. obustronny ( ) Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość). n/a x Operator powtórzenia dokładnie x razy. lewostronny x,y Operator powtórzenia minimum x i maksimum y razy. lewostronny Zaprezentowane operatory na pierwszy rzut oka mogą wydawać się niezrozumiałe. Zanim zaczniemy budować wyrażenia regularne, musisz poznać jeszcze kilka ważnych informacji. To czy operator jest lewostronny, prawostronny czy obustronny decyduje o rozmieszczeniu argumentu. Jeżeli operator jest lewostronny, to dotyczy atomu znajdującego się po jego lewej stronie np.: Kar*ol w tym wzorze operator gwiazdki dotyczy atomu litery r, Karol Trybulec p-programowanie.pl 1

(Karol)* w tym wypadku dotyczy wyrażenia atomowego w nawiasie. Atom jest to najmniejsze wyrażenie we wzorze. Nie rozpatrywujemy go na mniejsze składowe. Z atomów zbudowany jest wzór wyrażenia regularnego. Atomem może być pojedyncza litera lub cyfra. Dzięki nawiasom okrągłym, możemy całe wyrażenie znajdujące się wewnątrz nich przedstawić jako atom. Wydaje się to logiczne. Jeżeli dla operatora lewostronnego podamy cały nawias, wtedy argumentami są wszystkie atomy znajdujące się wewnątrz nawiasu (może być to np. cały napis). W artykule będę posługiwał się przede wszystkim funkcją preg_match(). Funkcje wyrażeń regularnych rozpoczynające się przedrostkiem preg pochodzą z rodziny PCRE (język Perl) i są bardziej optymalne od funkcji z ereg z rodziny POSIX. Tak podaje dokumentacja i wiele innych źródeł dostępnych w internecie. Działanie funkcji Preg_match Funkcja Preg_match() jest podstawową funkcją PHP dotyczącą wyrażeń regularnych. Przyjmuje ona 2 argumenty: wzorzec oraz ciąg znaków. Jeżeli ciąg znaków zostanie pomyślnie dopasowany do wzorca zwraca wartość logiczną true, w przeciwnym razie false. int preg_match ( string $wzorzec, string $ciag_znakow ) Przekazując wzorzec do funkcji należy pamiętać aby umieścić go pomiędzy dwoma slashami. Przykładowe wywołanie funkcji może wyglądać następująco: 1 2 3 4 5 6 7 8 9 10 11 <?php if (preg_match('/abc/', 'abcdabcdabcd')) echo "Wzorzec 'abc' pasuje do ciągu znaków 'abcdabcdabcd'"; else echo "Błąd: Wzorzec nie pasuje do ciągu znaków";?> Karol Trybulec p-programowanie.pl 2

Praktyczne wykorzystanie operatorów Przyjrzyjmy się jak działa kod umieszczony w poprzednim akapicie. Prosty wzorzec abc pasuje do ciągu znaków abcdabcdabcd. Co więcej, został on dopasowany w wielu miejscach: Posłużmy się operatorem początku ciągu znaków (czyli ^). Dopiszmy go do naszego wzorca ^abc i porównajmy do tego samego ciągu znaków: Tym razem wzorzec został dopasowany tylko jeden raz. Zamiast operatora początku ciągu można także użyć operator końca. Można także użyć obydwu operatorów na raz. Po zmianie operatorów wzorzec nie zostanie dopasowany (chyba że zmienimy ciąg znaków). Przyjrzyjmy się obrazkowi: Operatory początku i końca dają małe możliwości. Aby lepiej zrozumieć wyrażenia regularne, zróbmy kilka testów z operatorem dowolnego znaku. i operatorami powtórzeń. Operator kropki. zastępuje jeden dowolny znak. Nie można określić czy jest to operator lewostronny czy prawostronny, ponieważ nie przyjmuje on argumentów. Używając operatorów powtórzeń, należy pamiętać, że dotyczą one atomu znajdującego się po lewej Karol Trybulec p-programowanie.pl 3

stronie operatora. Spójrz na przykład: Czas na operatory powtórzeń. Użyję *,? oraz +. Ich opis znajdziesz w tabelce na samej górze artykułu. Są to operatory lewostronne, czyli najważniejszy jest atom znajdujący się po lewej stronie operatora. Pamiętaj że atomem może być także cały nawias: Robi się coraz ciekawiej. Proponują przetestować nawiasy oraz grupy znaków [a-z], [A-Z] i [0-9]. Wszystko odbywa się w ten sam sposób, należy tylko zapamiętać, że nawias jest traktowany jako jeden znak czyli atom. Grupy znaków w nawiasach kwadratowych także traktujemy jako jeden atom. Karol Trybulec p-programowanie.pl 4

Na obrazku wyżej, ostatni przykład musi zaczynać się od przynajmniej jednej dużej litery. Następnie maksymalnie jeden raz może pojawić się litera a. Następnie wiele razy może się powtórzyć końcówka rol. Napis musi kończyć się końcówką rol. Ostatnimi operatorami są operatory szczegółowego powtarzania (nawiasy klamrowe) oraz operator alternatywy. Alternatywa to funkcja logiczna wybierająca pomiędzy argumentami. Działanie jest bardzo proste: Wszystkie operatory zostały przedstawione. Teraz wystarczy trochę poćwiczyć, aby nabrać wprawy. Warto nauczyć się ich na pamięć.dobrze opanowane wyrażenia regularne dają duże pole do popisu, każdemu kto programuje w PHP. Karol Trybulec p-programowanie.pl 5

Walidacja adresu email za pomocą wyrażeń regularnych Pisanie długich wyrażeń regularnych najlepiej rozbić na kilka osobnych części. Na końcu każdą część zamykamy w nawias tworząc atom i łączymy je innym atomem bądź operatorem. Najbardziej przydanym i najczęściej stosowanym przypadkiem używania wyrażeń regularnych jest walidacja adresu email. Każdy większy serwis sprawdza poprawność wprowadzonego adresu email. Poprawny adres ma format: login@serwer.domena. Pisząc wyrażenie regularne walidujące adres emailowy, mamy na prawdę dużo możliwości. Możemy ustalić jakiej długości ma być login, czy adres może zawierać cyfry i czy może zaczynać się od cyfry. Możemy ustalić minimalną długość serwera albo dopuszczalne nazwy serwerów (np.: gmail, interia i o2). Możemy także ustalić domenę i dopuszczać w rejestracji tylko końcówki.pl. Zacznijmy od loginu. Przyjmuję, że login w adresie email powinien mieć długość od 4 do 20 znaków. Dopuszczam w nim wszelkie znaki. Całość łączę w nawias: Wzorzec walidacji loginu: ([a-z A-Z 0-9]4,20) Między loginem a serwerem znajduje się małpa, ale ten znak dodamy na końcu łącząc poszczególne atomy. Czas na serwer. Przyjmijmy, że powinien mieć on długość od 2 do 10 znaków. Wszystko będzie analogicznie jak w przykładzie wyżej, zmieni się tylko ilość znaków: Wzorzec walidacji serwera: ([a-z A-Z 0-9]2,10) Między loginem a domeną musi znajdować się kropka, dodamy ją na samym końcu podczas łączenia atomów. Ostatnim krokiem jest domena. Mogli byśmy ograniczyć ją od 2 do 3 znaków, jednak na potrzeby kursu przyjmuję, że chcemy adresy email Polaków, Niemców oraz domeny.com. Posłużymy się operatorem alternatywy: Wzorzec walidacji domeny: (pl gr com) Ostatnim krokiem jest połączenie wszystkich atomów w jeden wzorzec. Nie można zapomnieć o znaku początku i końca ciągu znaków. Uwaga! Ponieważ kropka jest operatorem wyrażeń regularnych, a chcemy użyć znaku kropki jako oddzielenie serwera od domeny, dlatego poprzedzamy ją dwoma backslashami. Ostateczna postać wyrażenia: Walidacja adresu email: /^([a-z A-Z 0-9]4,20)@([a-z A-Z 0-9]2,10)\\.(pl gr com)$/ Karol Trybulec p-programowanie.pl 6

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?php if (isset($_get['email'])) $email = $_GET['email']; $wynik = preg_match('/^([a-z A-Z 0-9]4,20)@([a-z A- Z 0-9]2,10)\\.(pl gr com)$/', $email);?> if ($wynik) echo "Wpisany adres jest poprawny! :)"; else echo "Błąd: proszę wpisać poprawny adres email!"; Standardowo nie wklejam żadnych gotowców. Pełno gotowych rozwiązań można znaleźć w internecie. Karol Trybulec p-programowanie.pl 7