⊗ppPmRgCPN 257 of 447 menu

Wspólny numer grup w wyrażeniach regularnych PHP

Rozważmy następującą sytuację. Załóżmy, że mamy zmienną z rokiem, który może się zmieniać od 1990 do 2099. Załóżmy, że chcemy uzyskać ostatnie dwie cyfry roku do grupy. Napiszmy odpowiednie wyrażenie regularne:

<?php $reg = '#19(9\d)|20(\d\d)#'; ?>

Czeka nas tu jednak jedna niedogodność. Chodzi o to, że dla lat z ubiegłego wieku dwie cyfry trafią do pierwszej grupy, a dla lat z drugiego wieku - do drugiej. Spójrzmy na przykładach.

Oto pierwszy wariant:

<?php $str = '1991'; preg_match($reg, $str, $res); var_dump($res); // [1 => '91'] ?>

A oto drugi wariant:

<?php $str = '2021'; preg_match($reg, $str, $res); var_dump($res); // [2 => '21'] ?>

Załóżmy teraz, że chcemy zapisać znalezione cyfry roku do zmiennej. Czeka nas problem, ponieważ nie wiemy dokładnie, z którym kluczem pobrać dane z grupy:

<?php $year = $res[1]; // potrzebny jest klucz 1 lub 2 ?>

Można rozwiązać problem za pomocą warunku:

<?php if (!empty($res[1])){ $year = $res[1]; } else{ $year = $res[2]; } ?>

Istnieje jednak prostsze rozwiązanie. Można użyć specjalnej konstrukcji (?| ). Wszystkie grupy, które znajdują się wewnątrz niej, będą miały jeden numer.

Poprawmy nasze wyrażenie regularne

<?php $reg = '#(?|19(9\d)|20(\d\d))#'; ?>

I teraz nasz rok na pewno będzie w grupie numer jeden:

<?php $year = $res[1]; ?>

Dane są ciągi znaków z datami, w których rok może się zmieniać od 1990 do 2099:

<?php $arr = [ '31-12-2025', '30-11-1995', '29-10-1990', ]; ?>

Dla każdej daty umieść dzień w pierwszej grupie, miesiąc w drugiej, a ostatnie dwie cyfry roku - w trzeciej.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć