⊗ppPmRgCPN 257 of 447 menu

Opšti broj grupa u regularnim izrazima PHP

Razmotrimo sledeću situaciju. Pretpostavimo da imamo varijablu sa godinom, koja može varirati od 1990 do 2099. Recimo da želimo da dobijemo poslednje dve cifre godine u grupu. Napišimo odgovarajući regularni izraz:

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

Međutim, ovde nas čeka jedna neprijatnost. Stvar je u tome što će za godine prošlog veka dve cifre završiti u prvoj grupi, a za godine drugog veka - u drugoj. Pogledajmo na primerima.

Evo prvog primera:

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

A evo drugog primera:

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

Pretpostavimo sada da želimo da pronađene cifre godine zapišemo u varijablu. Suočićemo se sa problemom, jer ne znamo tačno sa kojim ključem da uzmemo podatke iz grupe:

<?php $year = $res[1]; // potreban je ključ 1 ili 2 ?>

Problem se može rešiti uslovom:

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

Međutim, postoji jednostavnije rešenje. Možete koristiti posebnu komandu (?| ). Sve grupe koje se nalaze unutar nje će imati isti broj.

Hajde da ispravimo naš regularni izraz

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

I sada će naša godina sigurno biti u grupi sa brojem jedan:

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

Date su niske sa datumima, u kojima godina može varirati od 1990 do 2099:

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

Za svaki datum stavite dan u prvu grupu, mesec u drugu, a poslednje dve cifre godine - u treću.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij