Stronę tą wyświetlono już: 3759 razy
Wyrażenia regularne
Wyrażeniem regularnym nazywa się wzór, który w jednoznaczny sposób opisuje pewien określony warunkowo poszukiwany wzór tekstu w tekście. Dzięki wyrażeniom regularnym można w łatwy i elastyczny sposób odnaleźć w dość złożonym tekście fragment lub fragmenty tekstu pasujące do tego wyrażenia regularnego za pomocą jednej funkcji. Wyrażenia regularne stosowane są w PHP, Perl-u, a także w Shellu tudzież Bash-u związanym z pisaniem skryptów konsolowych.
Bardzo prosty przykład skryptu konsolowego dla systemów UNIX-owych, który wykorzystuje wyrażenia regularne jest taki oto skrypt wyszukujący pliki pasujące do wzorca A*.jpg oznaczającego plik o nazwie zaczynającej się na literę A i mający rozszerzenie .jpg.
Powyższy kod wyświetli na ekranie komputera wszystkie pliki z bieżącej lokalizacji konsoli, które pasują do podanego wzorca (wyrażenia regularnego).
Definiowanie wzorców regularnych w PHP wykorzystuje pewne zbiory znaków specjalnych, które nie mogą w wzorcach tekstowych w sposób bezpośredni występować. Do takich znaków specjalnych należą: . + * ? [ ^ ] $ ( ) { } = ! < > | : - . Jeżeli zaistnieje potrzeba wstawienia któregoś z wcześniej wymienionych znaków specjalnych jako części tekstu, w takim przypadku konieczne jest zastosowanie znacznika /.
Poniżej zamieszczam tabelkę opisującą w przybliżony sposób elementy składowe wyrażeń regularnych:
Przestarzałe funkcje PHP wykorzystujące wyrażenia regularne
W PHP występuje jeszcze seria przestarzałych funkcji operujących na wyrażeniach regularnych, które postanowiłem tutaj wymienić po kolei.
int ereg( string $pattern , string $tekst [, array &$regs ] )
Funkcja, która zwraca false, gdy nie wykryto żadnego wzorca w zmiennej $tekst pasującej do wyrażenia regularnego z z zmiennej $pattern, w przeciwnym razie zwraca liczbę znalezionych wyrażeń w tekście.
Opcjonalnie funkcja zwraca przez rekurencję wszystkie znalezione dopasowania do zmiennej $regs jako tablicę.
int eregi( string $pattern , string $tekst [, array &$regs ] )
Odpowiednik poprzedniej funkcji, który nie zwraca uwagi na wielkość liter.
string ereg_replace( string $pattern , string $replacement , string $string )
Funkcja zamienia tekst z zmiennej $string pasujący do wzorca podanego w zmiennej $patern i zastępuje go wyrażeniem z zmiennej $replacement.
string eregi_replace( string $pattern , string $replacement , string $tekst )
Funkcja, która wykonuje to samo co poprzednia z tą tylko różnicą, że nie zwraca przy tym uwagi na wielkość liter.
array split( string $pattern , string $tekst [, int $limit = -1 ] )
Funkcja dzieląca tekst w miejscach wystąpienia podtekstu pasującego do wzorca z zmiennej $pattern i zwracająca podzielony tekst w formie tablicy.
array spliti( string $pattern , string $tekst [, int $limit = -1 ] )
Funkcja działająca jak poprzednia, z tą tylko różnicą, że nie zwraca ona uwagi na wielkość liter w tekście.
string sql_regcase( string $tekst )
Funkcja stara się utworzyć poprawne wyrażenie regularne, definiujące w jednoznaczny sposób tekst z zmiennej $tekst.
Najnowsze funkcje PHP wykorzystujące wyrażenia regularne
int preg_match( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
Funkcja zwraca fałsz, gdy nie znaleziono żadnego dopasowania wyrażenia regularnego z zmiennej $pattern w zmiennej $subject, w przeciwnym razie liczbę uzyskanych dopasowań.
Do zmiennej opcjonalnej $matches funkcja zwraca w postaci tablicy wszystkie uzyskane dopasowania.
Przykłady:
Powyższy kod zwróci wartość 01-446, ponieważ wewnątrz wyrażenia regularnego nie wyróżniono pod wyrażeń za pomocą nawiasów () w sposób pokazany w poniższym przykładzie:
Powyższy kod zwróci:
- 01-466
- 01
- 466
Warto zauważyć, że funkcja skupiła swoje działanie tylko i wyłącznie na pierwszym wystąpieniu znalezionego wzorca pasującego do wyrażenia regularnego z zmiennej $pattern.
int preg_match_all( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
Funkcja ta w odróżnieniu od preg_match wyszukuje wszystkie możliwe wystąpienia tekstu pasującego do wyrażenia regularnego znajdującego się w zmiennej $pattern. Dopasowania mogą zostać zwrócone w postaci tablicy do zmiennej $matches, z tą różnicą względem poprzedniej funkcji, że tutaj tablica ta jest podwójna, gdzie w zerowym indeksie zapisywane są główne znalezione dopasowania a w kolejnych pośrednie wyróżnione za pomocą nawiasów ().
Przykład:
Powyższy przykład wyświetli następujący tekst:
- 01-466
- 01-447
- 01
- 01
- 466
- 447
mixed preg_replace( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Umożliwia zamianę fragmentu tekstu pasującego do wyrażenia regularnego opisanego w zmiennej $pattern i zamienia je według wzorca z zmiennej $replacement.
Przykład:
Powyższy kod zwraca: ul. Bredzisława Komoruskiego 16 01 466 Warszawa; ul. Donalda Tłuka 3 01 447 Warszawa
array preg_split( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
Funkcja ta dzieli podany tekst z zmiennej $subject w miejscu tekstu pasującego do wzorca z zmiennej $pattern
Przykład:
Powyższy kod zwróci (jak nie trudno się domyślić):
- data1
- data2
- data3
- data4
string preg_quote( string $str [, string $delimiter = NULL ] )
Funkcja zamienia wszystkie wystąpienia znaków specjalnych . + * ? [ ^ ] $ ( ) { } = ! < > | : - na takie, które odpowiadają znakom tekstowym w wyrażeniu regularnym.
Przykład:
Powyższy kod zwróci: . + * ? [ ^ ] $ ( ) { } = ! < > | : -