Wyrażenie regularne: Różnice pomiędzy wersjami

Z ToProste
Skocz do: nawigacji, wyszukiwania
m
m
Linia 11: Linia 11:
  
  
== Wyrażenie regularne w PHP ==
+
== Wyrażenia regularne ==
 +
 
 +
 
 +
=== Wyrażenie regularne w PHP ===
 
W [[PHP]] do wersji 5.2.x były używane dwa typy funkcji obsługujące wyrażenia regularne:
 
W [[PHP]] do wersji 5.2.x były używane dwa typy funkcji obsługujące wyrażenia regularne:
  
Linia 42: Linia 45:
  
  
== Wyrażenia regularne ==
 
 
=== Ograniczniki wyrażeń regularnych ===
 
=== Ograniczniki wyrażeń regularnych ===
 
Definicję wyrażenia regularnego przekazywanego do funkcji należy ująć w ograniczniki. Ogranicznikami może być każdy znak nie będący literą ani cyfrą. <br />Zwykle stosuje są ukośniki /, ale można także użyć m.in |, *, #, ! czy nawiasy ( ), [ ] oraz { }.<br />Ważne, aby znak użyty do zamknięcia definicji wyrażenia regularnego był taki sam jak znak otwierający.
 
Definicję wyrażenia regularnego przekazywanego do funkcji należy ująć w ograniczniki. Ogranicznikami może być każdy znak nie będący literą ani cyfrą. <br />Zwykle stosuje są ukośniki /, ale można także użyć m.in |, *, #, ! czy nawiasy ( ), [ ] oraz { }.<br />Ważne, aby znak użyty do zamknięcia definicji wyrażenia regularnego był taki sam jak znak otwierający.
Linia 61: Linia 63:
  
 
=== Prosty wzorzec ===
 
=== Prosty wzorzec ===
Sprawdźmy czy zdanie '''Ola ma Asa''' zawiera słowo '''kot'''
+
: Sprawdźmy czy zdanie '''Ola ma Asa''' zawiera słowo '''kot'''
 +
 
 +
:: '''preg_match''' ( '/kot/', 'Ola ma Asa' ) [http://wyrazeniaregularne.proste.info.pl/tester-wyrazen/index.php?w=/kot/&c=Ola%20ma%20Asa] - wynik: 0 - FAŁSZ
 +
 
 +
: a teraz sprawdźmy czy znajdziemy słowo '''as'''
 +
::  '''preg_match''' ( '/As/', 'Ola ma Asa' ) [http://wyrazeniaregularne.proste.info.pl/tester-wyrazen/index.php?w=/as/&c=Ola%20ma%20Asa] - wynik: 0 - FAŁSZ
 +
: Dziwne? Otóż nie, ponieważ szukaliśmy słowa '''as''', którego zdanie nie zawiera.
 +
 
 +
:Ale słowo '''As''' już znajdziemy
 +
::  '''preg_match''' ( '/As/', 'Ola ma Asa' ) [http://wyrazeniaregularne.proste.info.pl/tester-wyrazen/index.php?w=/As/&c=Ola%20ma%20Asa] - wynik: 1 - PRAWDA
 +
: ponieważ wzorzec w tej postaci rozróżnia wielkość liter.
  
: '''preg_match''' ( '/kot/', 'Ola ma Asa' ) [http://wyrazeniaregularne.proste.info.pl/tester-wyrazen/index.php?w=/kot/&c=Ola%20ma%20Asa] - wynik: 0 - FAŁSZ
 
  
a teraz sprawdźmy czy znajdziemy słowo '''As'''
 
:  '''preg_match''' ( '/As/', 'Ola ma Asa' ) [http://wyrazeniaregularne.proste.info.pl/tester-wyrazen/index.php?w=/as/&c=Ola%20ma%20Asa] - wynik: 1 - PRAWDA
 
  
 
== Zobacz też ==
 
== Zobacz też ==

Wersja z 23:26, 20 cze 2013

Wyrażenie regularne (ang. skrót regexp lub regex) jest ciągiem znaków przy pomocy którego można opisać inne ciągi znaków lub grupy ciągów wg określonych zasad.
Wyrażenie te używane są przez różnego rodzaju edytory tekstu do poszukiwania interesujących nas fragmentów tekstu, które zdefiniowane są przez wzorzec. Tekst pasujący do wzoru można zastąpić innym lub usunąć.


Historia

Wyrażenie regularne wywodzą się z teorii automatów i języka formalnego. Dziedziny te zajmują się modelami i sposobami klasyfikowania języków formalnych, które są niczym innym jak zestawem ciągów znaków.

W latach 40 XX w. Warren McCulloch i Walter Pitts opisali system nerwowy poprzez przedstawienie neuronów jako automatu. Później matematyk Stephen Kleene ujął te modele w zbiory regularne, natomiast Ken Thompson przeniósł ten zapis do edytora qed a następnie do edytora Unixowego ed i do grep'a.
Od tego czasu wyrażenia regularne są szeroko stosowane w Unixie i jego narzędziach takich jak: expr, awk, Emacs, vin, lex, Sed i PERL.
Henry Spencer napisał większość narzędzi do wprowadzenia biblioteki regex.


Wyrażenia regularne

Wyrażenie regularne w PHP

W PHP do wersji 5.2.x były używane dwa typy funkcji obsługujące wyrażenia regularne:

  • ereg* - obsługujące rozszerzone wyrażenia regularne (Extended Regular Expressions) [1]
  • preg_* - obsługujące wyrażenia regularne znane z języka PERL (zwane Basic Regular Expressions lub Perl Compatible Regular Expressions) [2]

Od wersji PHP 5.3.0 funkcje z grupy ereg uważane są za przestarzałe i nie zaleca się ich używania, skupimy się więc na funkcjach obsługujących wyrażenia regularne znane z PERL'a:


Wyrażenia regularne będziemy testować przy pomocy funkcji preg_match( wzór, badany_ciąg ), której użyjemy w poniższy sposób:

<?php 
// Jeśli ciąg znaków określony przez wyrazenie_regularne jest w badany_ciag, to wyświetli 1.
// Jeśli ciągu znaków określonych przez wyrazenie_regularne nie ma w badany_ciag, to wyświetli 0.
$wynik = preg_match( wyrazenie_regularne, badany_ciag );
echo $wynik; 
?>


Ograniczniki wyrażeń regularnych

Definicję wyrażenia regularnego przekazywanego do funkcji należy ująć w ograniczniki. Ogranicznikami może być każdy znak nie będący literą ani cyfrą.
Zwykle stosuje są ukośniki /, ale można także użyć m.in |, *, #, ! czy nawiasy ( ), [ ] oraz { }.
Ważne, aby znak użyty do zamknięcia definicji wyrażenia regularnego był taki sam jak znak otwierający.

Jeśli szukamy tekstu ala ma kota, to do funkcji przekazujemy /ala ma kota/. Gdy jako ograniczniki użyjemy znaku !, wtedy wyrażenie regularne będzie wyglądało: !ala ma kota!.

Oto przykłady kilku różnych ograniczników:

/ala ma kota/
|ala ma kota|
*ala ma kota*
#ala ma kota#
 !ala ma kota!
,ala ma kota,
[ala ma kota]
{ala ma kota}


Prosty wzorzec

Sprawdźmy czy zdanie Ola ma Asa zawiera słowo kot
preg_match ( '/kot/', 'Ola ma Asa' ) [5] - wynik: 0 - FAŁSZ
a teraz sprawdźmy czy znajdziemy słowo as
preg_match ( '/As/', 'Ola ma Asa' ) [6] - wynik: 0 - FAŁSZ
Dziwne? Otóż nie, ponieważ szukaliśmy słowa as, którego zdanie nie zawiera.
Ale słowo As już znajdziemy
preg_match ( '/As/', 'Ola ma Asa' ) [7] - wynik: 1 - PRAWDA
ponieważ wzorzec w tej postaci rozróżnia wielkość liter.


Zobacz też

<htmlet>zobacz-tez</htmlet> Funkcje PCRE