środa, 17 czerwca 2015

[PHP][RegEx] Podstawy wyrażeń regularnych cz.1

TRUE
1888640682065359108
Wyrażenia regularne (regular expressions) to obszerny temat, ale raz zrozumiany przydaje się ogromnie w każdym projekcie i w każdym języku programowania. W skrócie jest to wzorzec, który dopasowujemy do zadanego ciągu znaków. Od zwykłego porównywania dwóch ciągów tekstowych różni się tym, że w przypadku wyrażenia regularnego podajemy wzorzec (pattern), a nie drugi ciąg. Wzorzec taki następnie może być dopasowany do więcej niż jednego ciągu tekstowego. Za pomocą wyrażenia regularnego dopasowywać możemy litery, cyfry, znaki interpunkcyjne i specjalne, w tym te "niewidzialne", jak tabulacja, czy znak nowej linii. Mają zastosowanie wszędzie tam, gdzie występuje konieczność sprawdzenia, czy dany ciąg znaków pasuje do zadanego wzorca, np. czy jest on poprawnym adresem emial, bądź adresem URL. Stosowane są praktycznie na każdym kroku. W sieci jest cała masa testerów on-line, jeśli chodzi o poprawność wyrażeń. Polecam do zabawy, kilka z nich znajdziemy tutaj, w dziale QuickLinks.

1. Ograniczniki - /

Każde wyrażenie regularne powinno zostać objęte w ogranicznik na początku i końcu wyrażenia. Takim ogranicznikiem zazwyczaj jest slash ( / ), ale może to być również inny znak. Przyjęło się jednak, że jako ogranicznik stosujemy / i tego się trzymajmy. Proste wyrażenie regularne może mieć więc następującą postać:
[code]/kot/[/code]
gdzie kot to wzorzec dopasowania, a / na początku i końcu to ograniczniki. Wyrażenie takie pasować będzie do każdego ciągu tekstowego, w którym występować będzie słowo kot.
Pasować będzie do wszystkich trzech poniższych ciągów:
[code]Ala ma kota.[/code]
[code]Ala ma kota i Ola ma kota.[/code]
[code]kot ma na imię Mruczek[/code]
[code]Te koty mają po 4 lata.[/code]
Nie ma znaczenia, czy ciąg kot występuje tutaj na początku, na końcu, czy w środku badanego ciągu tekstowego oraz ile razy wystąpi, ma jednak znaczenie wielkość liter. Powyższe wyrażenie nie dopasuje się już więc do ciągu:
[code]Kot jest szary.[/code]
W powyższym zdaniu Kot != kot.
Zachowanie funkcji dopasowującej możemy zmienić za pomocą dodatkowych parametrów, tak aby ignorowała wielkość liter i dopasowała słowo kot zarówno do kot, Kot, jak i KoT, ale o tym w kolejnej części.

2. Zaczepienia końca i początku ciągu - ^ i $

Jak zauważyliśmy wyżej - wyrażenie /kot/ pasuje do każdego ciągu tekstowego, w którym występuje słowo kot, niezależnie w którym miejscu ciągu to słowo wystąpi i nie ważne, czy wystąpi jako pojedyńcze słowo kot, czy też jako część innego słowa, jak np.:
[code]Ala jest markotna.[/code]
Powyższy ciąg zostanie dopasowany.
Aby teraz określić, że słowo kot musi wystąpić dokładnie na początku, lub na końcu ciągu stosujemy ograniczniki początku i końca, tzw. zaczepienia lub kotwice:

  • ^ - oznacza początek ciągu
  • $ - oznacza koniec ciągu

Jeśli zmienimy teraz nasze wyrażenie na:
[code]/^kot/[/code]
będzie ono pasować jedynie do ciągów, w których słowo kot występuje na samym początku ciągu, a więc np. do:
[code]kot jest szary[/code]
[code]kot jest gruby[/code]
Nie będzie natomiast już pasować do ciągu:
[code]Ten kot jest szary.[/code]
Analogicznie z zaczepieniem końca ciągu - $. Wyrażenie:
[code]/kot$/[/code]
będzie nam pasować do ciągów:
[code]To jest kot[/code]
[code]Tam jest czarny kot[/code]
Nie dopasuje się już jednak do:
[code]Ten kot jest niegrzeczny.[/code]
Obie kotwice mogą też wystąpić wspólnie i tak np. wyrażenie:
[code]/^kot$/[/code]
dopasuje się tylko i wyłącznie do ciągu:
[code]kot[/code]
Zaczepienia początku i końca ciągu, czyli ^ i $ są najczęściej używanymi zaczepieniami.
Takich kotwic jest więcej, ale opiszemy je sobie w kolejnej części.

3. Funkcja sprawdzająca - preg_match()

W języku PHP do sprawdzenia dopasowania służy funkcja:
[code]$wynik = preg_match(wyrazenie_regularne, badany_ciag);[/code]
Zwraca ona wartość 1, jeśli wyrażenie zostanie dopasowane do badanego ciągu, lub 0, jeśli takie dopasowanie nie wystąpi. I tak na przykład:
[code]$w = preg_match('/kot/', 'Ala ma kota');[/code]
zwróci wartość 1, gdyż dopasowanie wystąpi, natomiast wywołanie:
[code]$w = preg_match('/^kot/', 'Ala ma kota');[/code]
zwróci nam 0, gdyż dopasowanie nie wystąpi.
Będziemy się tutaj dalej posługiwać m.in. takim zapisem, gdyż jest on chyba czytelniejszy dla oka.

4. Dowolny znak - kropka ( . )

W wyrażeniach regularnych występuje kilka znaków o specjalnym znaczeniu. Jednym z nich jest kropka ( . ). Kropka oznacza dowolny znak w ciągu. Przyjrzyjmy się poniższym dopasowaniom:
[code]$w = preg_match('/k.t/', 'Ala ma kota');[/code]
[code]$w = preg_match('/k.t/', 'To jest katalog');[/code]
[code]$w = preg_match('/k.t/', 'Bez kitu');[/code]
We wszystkich trzech przypadkach dopasowanie wystąpi, gdyż zapis:
[code]k.t[/code]
pasuje do każdego 3-literowego ciągu, w którym początkowym znakiem jest k, końcowym t, a środkowym każdy inny, dowolny znak. Należy jednak pamiętać, iż w tym przypadku kropka oznacza jedynie JEDEN dowolny znak, poniższe zatem już się nam nie dopasuje:
[code]$w = preg_match('/k.t/', 'To jest rakieta');[/code]
Powód niedopasowania: w słowie rakieta pomiędzy literami k i t mamy dwa znaki - i e.

A jak teraz sprawdzić, czy w badanym ciągu występuje znak kropki, skoro kropka oznacza dowolny znak?
Otóż w takim przypadku znak kropki poprzedzić musimy backslashem ( \ ). Na przykład:
[code]$w = preg_match('/k\.t/', 'to jest byk.to jest krowa.');[/code]
Wyrażenie takie zostanie dopasowane, gdyż szukamy dopasowania dla ciągu k.t - kropka poprzedzona backslashem traci swoje specjalne znaczenie i staje się zwykłą kropką.

5. Znaki specjalne

Nie tylko znak kropki ma specjalne znaczenie w wyrażeniu regularnym. Takich znaków jest kilka i za każdym razem, gdy chcemy pozbawić taki znak swojego specjalnego znaczenia i użyć go jako zwykłego znaku to musimy poprzedzić go znakiem backslash ( \ ). Lista znaków specjalnych znajduje się poniżej:
[code]\ . * + ? [ ^ $ | { ( )[/code]
Znakiem specjalnym jest też wykorzystany ogranicznik, czyli zazwyczaj /.
Poszczególne znaki specjane oraz ich zastosowanie omówimy sobie dokładnie w kolejnych akapitach.

6. Zbiory znaków - nawias kwadratowy [ ]

W wyrażeniu podać możemy zamiast pojedyńczego znaku cały zbiór znaków, np. zbiór wszystkich lub tylko zadanych liter, lub cyfr. Zbiory znaków podajemy w nawiasach kwadratowych [ ]. Przyjrzyjmy się teraz dwóm przykładom:
[code]$w = preg_match('/kot/', 'To jest kot');[/code]
Wyrażenie /kot/ zostanie tutaj dopasowane do ciągu To jest kot.
Zobaczmy teraz wyrażenie, w którym podamy zbiór znaków:
[code]$w = preg_match('/[pies]/', 'To jest kot');[/code]
Wyrażenie takie również zostanie dopasowane. Dlaczego? Otóż zapis:
[code][pies][/code]
oznacza zbiór znaków: p, i, e, s, a więc zbiór 4 liter, z których wystąpić musi dokładnie JEDNA, obojętnie która.
W naszym przypadku, w ciągu:
[code]To jest kot[/code]
występuje litera e, oraz litera s, zatem zbiór znaków w którym występuje e i s zostanie do takiego ciągu dopasowany.
Zbiory znaków możemy łączyć ze zwykłymi znakami z poza zbioru, np.:
[code]ab[XYZ]cd[/code]
pasować będzie do wszystkich trzech poniższych ciągów:
[code]abXcd[/code]
[code]abYcd[/code]
[code]abZcd[/code]

7. Zakresy znaków w zbiorach - [a-z]

W wyrażeniach regularnych podawać możemy zakresy znaków - np. wszystkie litery, lub wszystkie cyfry. Zakres znaków podajemy za pomocą myślnika ( - ), zapis taki jak poniżej:
[code][a-z][/code]
oznaczać będzie wszystkie małe litery od a do z. Popatrzmy teraz na przykład:
[code]ab[a-z]cd[/code]
Powyższe wyrażenie zostanie dopasowane do wszystkich poniższych ciągów:
[code]abacd[/code]
[code]abbcd[/code]
[code]abccd[/code]
[code]abxcd[/code]
[code]abycd[/code]
[code]abzcd[/code]
Stanie się tak dlatego, gdyż zbiór [a-z] oznacza dowolny jeden znak ze zbioru liter od a do z.
Możemy tworzyć swoje własne zbiory, np. zapis [a-f] oznaczać będzie dowolny znak ze zbioru liter od a do f.
Istnieje kilka standardowych zakresów, których używać będziemy bardzo często w swoich wyrażeniach:

  • [a-z] - oznacza dowolną literę od a do z
  • [A-Z] - oznacza dowolną literę od A do Z, czyli to samo co powyżej, ale dla wielkich liter
  • [0-9] - oznacza dowolną cyfrę

Zakresów znaków możemy w zbiorze podać kilka, np.:
[code]ab[a-zA-Z0-9]cd[/code]
pasować będzie do wszystkich poniższych ciągów:
[code]abacd[/code]
[code]abBcd[/code]
[code]ab0cd[/code]
[code]abXcd[/code]
[code]ab2cd[/code]
[code]ab5cd[/code]

8. Dopełnienie zbioru - ^

Jak pamiętamy z początku artykułu, znak karety ( ^ ) oznacza początek badanego ciągu. Znak ten ma jednak inne znaczenie jeśli zastosujemy go wewnętrz zbioru znaków, czyli pomiędzy nawiasami kwadratowymi. Oznacza on w takim przypadku negację zbioru, czyli jego zaprzeczenie. Spójrzmy na poniższy zapis:
[code][^a-z][/code]
Zapis taki oznacza zbiór znaków, w którym nie może wystąpić żadna mała litera od a do z.
Znak ^  podajemy przed podaniem danego zakresu lub znaku, którego będzie dotyczyć, na samym początku w dopełnianym zbiorze. Spójrzmy na przykład:
[code]$w = preg_match('/abc[^a-z]/', 'abcdef');[/code]
Wyrażenie to nie zostanie dopasowane, gdyż po ciągu abc nie może wystąpić żaden znak z zakresu od a do z.
Wyrażenie za to dopasuje się do:
[code]$w = preg_match('/abc[^a-z]/', 'abc123');[/code]
gdyż tutaj po abc występują cyfry, nie występuje żaden znak z zakresu od a do z.

9. Klasy znaków - \w, \d, \s, POSIX

Jako, iż zakresy znaków takie jak litery A-Z, czy cyfry 0-9 są dość często używane w wyrażeniach regularnych - istnieją skrócone wersje zapisu zakresu znaków.
Lista skróconych zapisów:


  • \w - oznacza wszystkie litery, cyfry i podkreślnik - [a-zA-Z0-9_]
  • \W - stanowi negację \w - [^a-zA-Z0-9_]
  • \d - oznacza wszystkie cyfry - [0-9]
  • \D - stanowi negację \d - [^0-9]
  • \s - oznacza znaki specjalne - spację, \n, \r\ i \t
  • \S - stanowi negację \s

Stosowanie takiego zapisu niczym nie różni się od podawania zakresu w nawiasach kwadratowych, przykład:
[code]$w = preg_match('/abc[^0-9]/', 'abc123');[/code]
jest równoważny z:
[code]$w = preg_match('/abc\D/', 'abc123');[/code]

Zapis POSIX-owy
Wybrane zakresy można również zapisać w standardzie POSIX.
Lista zakresów znajduje się poniżej:

  • [:alnum:] - oznacza wszystkie litery i znaki
  • [:alpha:] - oznacza litery
  • [:blank:] - oznacza spację lub znak tabulacji
  • [:cntrl:] - oznacza znaki sterujące
  • [:digit:] - oznacza cyfry
  • [:graph:] - oznacza znaki drukowalne bez odstępu
  • [:lower:] - oznacza jedynie małe litery
  • [:print:] - oznacza znaki drukowalne ze znakiem odstępu
  • [:punct:] - oznacza znaki drukowalne za wyjątkiem liter i cyfr
  • [:space:] - oznacza spacje
  • [:upper:] - oznacza jedynie duże litery
  • [:xdigit:] - oznacza cyfry w zapisie szesnastkowym

Przykładowy zapis POSIX-owy:
[code]$w = preg_match('/abc[^[:digit:]]/', 'abc123');[/code]
równoważny jest z:
[code]$w = preg_match('/abc[^0-9]/', 'abc123');[/code]
co oznacza oczywiście, że po ciągu abc musi wystąpić znak różny od cyfry.

10. Alternatywa - lub - znak |

W wyrażeniu regularnym możemy podać alternatywę, czyli logiczne OR. Dopasowany będzie wtedy któryś z ciągów rozgraniczonych znakiem ( | ). Aby to zobrazować spójrzmy na dwa przykłady:
[code]$w = preg_match('/kot|pies/', 'To jest kot');[/code]
[code]$w = preg_match('/kot|pies/', 'To jest pies');[/code]
W obu powyższych przykładach istnieje dopasowanie, gdyż dopasowywany jest albo ciąg kot, albo ciąg pies.
Alternatywa operuje na całości członu znajdującego się po lewej lub po prawej stronie znaku |.
Jeśli więc stworzymy takie wyrażenie:
[code]$w = preg_match('/.kot|pies./', 'To jest kot');[/code]
Będzie ono dopasowywane na zasadzie:
[code]/.kot/ [/code]
lub
[code]/pies./[/code]

11. Grupowanie - nawiasy okrągłe - ( )

Grupowanie za pomocą nawiasów okrągłych () ma takie samo zastosowanie jak w matematyce podczas grupowania działań. Jest to bardzo często wykorzystywana funkcja, szczególnie podczas używania znaku alternatywy, gdzie określić musimy dokładnie jakiej części wyrażenia dotyczy alternatywa. Spójrzmy na przykład z poprzedniego akapitu:
[code]$w = preg_match('/.kot|pies./', 'To jest kot');[/code]
W powyższym przypadku dopasowujemy albo wyrażenie /.kot/ albo wyrażenie /pies./.
Jeśli jednak chcemy, aby alternatywa dotyczyła jedynie słów kot i pies (bez uwzględniania kropek) to użyjemy nawiasu grupującego:
[code]$w = preg_match('/.(kot)|(pies)./', 'To jest kot');[/code]
W tym przypadku dopasowywane jest wyrażenie:
[code]/.(kot)|(pies)./[/code]
gdzie wystąpić musi na początku i na końcu ciągu dowolny znak, w środku natomiast wystąpić musi ciąg kot lub pies.
Nawiasy mają jeszcze jedno zastosowanie, ale o tym napiszemy sobie za chwilę.

12. Kwantyfikatory - *, +, ?, { }

W poprzednich akapitach stosowaliiśmy zbiory znaków, które oznaczały, że w ciągu musi wystąpić dokładnie jeden znak ze zbioru. Co jeśli jednak tych znaków musi wystąpić więcej lub konkretna ich liczba? Wtedy właśnie stosujemy kwantyfikatory. Znaki *, +, ? i nawiasy klamrowe {} to tzw. kwantyfikatory. Służą one do określania ile razy w ciągu wystąpić musi wyrażenie je poprzedzające. Są to bardzo często wykorzystywane funkcjonalności jeśli chodzi o wyrażenia regularne. Dzielą się na dwie grupy - ogólne i szczegółowe. Opiszemy sobie je po koleji.

Kwantyfikatory ogólne:

  • * (gwiazdka) oznacza zero lub więcej wystąpień
  • + (plus) oznacza jedno lub więcej wystąpień
  • ? (znak zapytania) oznacza zero lub jedno wystąpienie

Gwiazdka (*)

Oznacza zero lub więcej wystąpień. Popatrzmy na przykłady - najpierw przykład bez użycia gwiazdki:
[code]$w = preg_match('/ab[A-Z]/', 'abC');[/code]
W przypadku tym, aby zaistniało dopasowanie, w badanym tekście po ciągu ab musi wystąpić JEDEN znak z zakresu [A-Z] .
Przyjrzyjmy się teraz temu wyrażeniu:
[code]/ab[A-Z]*/[/code]
Wyrażenie takie pasować będzie do poniższych ciągów:
[code]ab[/code]
[code]abC[/code]
[code]abD[/code]
[code]abXYZ[/code]
[code]abABCDEF[/code]
Zapis z gwiazdką oznacza tutaj, że ciąg złożony z dowolnej liczby wielkich liter może, ale nie musi wystąpić (zero lub więcej wystąpień) po ciągu ab.

Plus (+)

Znak + oznacza jedno lub więcej wystąpień, dopasowywany ciąg musi więc wystąpić co najmniej raz. Wykorzystajmy teraz ten kwantyfikator zamiast gwiazdki:
[code]/ab[A-Z]+/[/code]
Wyrażenie takie pasować będzie do poniższych ciągów:
[code]abA[/code]
[code]abC[/code]
[code]abD[/code]
[code]abXYZ[/code]
[code]abABCDEF[/code]
Zapis z + oznacza tutaj, że ciąg złożony z dowolnej liczby wielkich liter [A-Z] musi wystąpić co najmniej raz po ciągu ab.
Nie będzie zatem pasować nam już do:
[code]ab[/code]

Znak zapytania (?)

Kwantyfikator ten określa zero lub jedno wystąpienie. Wyrażenie jak poniżej:
[code]/ab[A-Z]?/[/code]
pasować będzie jedynie do ciągów:
[code]ab[/code]
[code]abA[/code]
[code]abC[/code]
[code]abX[/code]
Nie będzie za to pasować nam do:
[code]abAB[/code]
[code]abCDE[/code]
[code]abXYXXZ[/code]
gdyż znak złożony z wielkiej litery występuje po ciągu ab więcej, niż jeden raz.

Kwantyfikatory szczegółowe - {}

Tym rodzajem kwantyfikatorów określamy DOKŁADNĄ liczbę wymaganych wystąpień. Liczbę wymaganych wystąpień podajemy w nawiasie klamrowym tóż po wymaganym ciągu. Wykorzystać możemy go na kilka sposobów - podając dokładną liczbę wystąpień, minimalną liczbę wystąpień, maksymalną liczbę wystąpień oraz liczbę wystąpień z podanego zakresu. Poniżej lista wraz z opisem jak to działa:

  • {n} oznacza dokładnie n wystąpień
  • {n,} oznacza co najmniej n wystąpień
  • {m, n} oznacza od m do n wystąpień

Przykładowo, wyrażenie o postaci:
[code]ab[A-Z]{1, 3}[/code]
oznacza, że po ciągu ab wystąpić musi od 1 do 3 znaków z zakresu [A-Z] i pasować będzie np. do:
[code]abA[/code]
[code]abC[/code]
[code]abCD[/code]
[code]abCDE[/code]
Wyrażenie natomiast jak poniżej:
[code]ab[A-Z]{2, }[/code]
oznacza, że po ciągu ab wystąpić muszą conajmniej 2 znaki z zakresu [A-Z] i pasować będzie do:
[code]abAB[/code]
[code]abABC[/code]
[code]abABCD[/code]
[code]abABCDE[/code]
Przy używaniu nawiasów klamrowych należy pamiętać, że taki kwantyfikator dotyczy jedynie ostatniego znaku przed nim, a więc wyrażenie:
[code]kot{2, 5}[/code]
nie oznacza tutaj, że ciąg kot musi wystąpić od 2 do 5 razy, lecz, że litera t musi tyle razy wystąpić.
Zapis taki będzie więc pasował jedynie do:
[code]kott[/code]
[code]kottt[/code]
[code]kotttt[/code]
[code]kottttt[/code]
Jeśli chcemy, aby kwantyfikator stosowany był do całego ciągu kot, a nie tylko do ostatniej litery, musimy zastosować nawias grupujący:
[code](kot){2, 5}[/code]
Dopiero taki zapis oznacza, iż ciąg kot musi wystąpić od 2 do 5 razy i dopasowany zostanie do:
[code]to jest kotkot[/code]
[code]to jest kotkotkot[/code]
[code]to jest kotkotkotkot[/code]
[code]to jest kotkotkotkotkot[/code]

13. Przechwytywanie - nawiasy okrągłe ()

W tym momencie dochodzimy do bardzo ciekawej i bardzo często używanej funkcjonalności wyrażeń regularnych. Przechwytywanie pozwala na wyodrębnianie dopasowanego ciągu do tablicy. Przechwytywania dokonujemy za pomocą nawiasów klamrowych () - tych samych, które służą do grupowania elementów ciągu. Przechwycone w nawiasach dopasowania są następnie umieszczane w tablicy, którą podajemy jako 3 parametr funkcji preg_match():
[code]$w = preg_match('/(kot|pies)/', 'To jest kot', $matches);[/code]
Wszystko to co zostanie objęte nawiasami klamrowymi w wyrażeniu zostanie przechwycone do tablicy $matches. Przechwyceń takich można dokonać więcej, niż jedno - w przypadku większej ich ilości będą one umieszczane jako kolejne elementy tablicy $matches. Warto tutaj wiedzieć, że przechwycone dopasowania lądują w tablicy zawsze począwszy od indeksu = 1, czyli od $matches[1] do $matches[n]. W indeksie zerowym tablicy, czyli $matches[0] znajduje się zawsze ta część ciągu, od którego zaczęło się dopasowanie.

Aby to zobrazować popatrzmy na przykład poniżej.
Mamy sobie taki oto tekst:
[code]Janusz wisi Andrzejowi 125zł i powiedział, że odda za 2 lata.[/code]
Chcemy z tego tekstu przechwycić wartość długu i czas za jaki zostanie on zwrócony.
Zrobimy to następującym wyrażeniem:
[code]/([0-9]+)[^0-9]+([0-9]+)/[/code]
lub bardziej skrótowo:
[code]/(\d+)\D+(\d+)/[/code]
Co to oznacza po koleji?

  • \d+ - oznacza pierwszą część ciągu, która jest złożona jedynie z cyfr, musi tutaj wystąpić conajmniej raz (kwantyfikator +)
  • (\d+) - oznacza przechwycenie powyższego
  • \D+ - oznacza wystąpienie części ciągu, która nie zawiera w sobie cyfr.
  • \d+ - oznacza kolejną część ciągu, która jest złożona jedynie z cyfr, musi tutaj wystąpić conajmniej raz (kwantyfikator +)
  • (\d+) - oznacza przechwycenie powyższego do kolejnego elementu w tablicy.

Zobaczmy teraz na przykładzie kodu:
[code]$w = preg_match('/(\d+)\D+(\d+)/', 'Janusz wisi Andrzejowi 125zł i powiedział, że odda za 2 lata.', $matches);[/code]
Wykonanie powyższego spowoduje, że w tablicy $matches znajdziemy następujące elementy:
[code]$matches[0] - '125zł i powiedział, że odda za 2'
$matches[1] - '125'
$matches[2] - '2'[/code]
Nawiasy można w sobie zagnieżdźać - przechwytywanie zaczyna się wtedy od nawiasa znajdującego się najbardziej "na zewnątrz". Zobaczymy to na przykładzie:
[code]$w = preg_match('/((\d+)\D+)(\d+)/', 'Janusz wisi Andrzejowi 125zł i powiedział, że odda za 2 lata.', $matches);[/code]
Wykonanie powyższego spowoduje, że w tablicy $matches znajdziemy następujące elementy:
[code]$matches[0] - '125zł i powiedział, że odda za 2'
$matches[1] - '125zł i powiedział, że odda za '
$matches[2] - '125'
$matches[3] - '2'[/code]
W powyższym przykładzie najpierw dokonujemy przechwycenia:
[code]((\d+)\D+) - '125zł i powiedział, że odda za '[/code]
Następnie wewnątrz niego:
[code](\d+) - '125'[/code]
I na koniec ostatnie przechwycenie:
[code](\d+) - '2'[/code]

I to tyle w części pierwszej.
W kolejnej części omówimy sobie pozostałe funkcje, takie jak przechwytywania wsteczne, modyfikatory, aliasy, czy podmianę dopasowań z preg_replace() i przeanalizujemy kilka praktycznych zastosowań wyrażeń regularnych.

22 komentarze:

  1. czy i jak istnieje odwrócenie wyrazenia zanim stanie sie ono wyrazeniemreguralnym ?

    OdpowiedzUsuń
    Odpowiedzi
    1. Znaczy w jakim sensie? Bo nie za bardzo rozumiem pytanie.

      Usuń
    2. Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download Now

      >>>>> Download Full

      Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download LINK

      >>>>> Download Now

      Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download Full

      >>>>> Download LINK 7c

      Usuń
  2. W punkcie 13 nazywasz nawiasy okrągłe nawiasami klamrowymi. Dwa razy. ;)

    OdpowiedzUsuń
  3. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  4. A co oznacza 'sim' w formie '/.*/sim' ?

    OdpowiedzUsuń
  5. Świetnie wszystko wytłumaczone, Gratulacje.

    OdpowiedzUsuń
  6. Dzięki temu artykułowi, po 13 latach "w zawodzie" w końcu to zrozumiałem. Zawsze podchodziłem do wyrażeń jak do jeża, a okazuje się że to całkiem proste. Wielki dzięki autorze :-)

    OdpowiedzUsuń
  7. Does Titanium have nickel in it? | Titanium Art
    There is keith titanium one copper ore that you will see titanium jewelry when looking at this gold alloy - titanium tent stove Titanium Bronze. This titanium bar stock copper is extremely rare and is a very rare fallout 76 black titanium metal

    OdpowiedzUsuń
  8. Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download Now

    >>>>> Download Full

    Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download LINK

    >>>>> Download Now

    Php Majster: [Php][Regex] Podstawy Wyrażeń Regularnych Cz.1 >>>>> Download Full

    >>>>> Download LINK

    OdpowiedzUsuń
  9. Wprowadź innowacje do swojej kariery programisty! Dołącz do kursu, aby poszerzyć umiejętności, zanurzyć się w nowoczesnych technologiach i stać się architektem cyfrowego przyszłości. https://coderslab.pl/pl/javascript-developer-react

    OdpowiedzUsuń
  10. Dobra robota! Czekam z niecierpliwością na kolejne wpisy! https://aexol.com/pl/

    OdpowiedzUsuń

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji