⊗ppPmRgCPN 257 of 447 menu

Skupna številka zajetih skupin v regularnih izrazih PHP

Razmislimo o naslednji situaciji. Recimo, da imamo spremenljivko z letom, ki se lahko spreminja od 1990 do 2099. Recimo, da želimo dobiti zadnji dve števki leta v zajeto skupino. Napišimo ustrezen regularni izraz:

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

Vendar nas tu čaka ena neprijetnost. Dejstvo je, da bosta za leta prejšnjega stoletja dve števki padli v prvo zajeto skupino, za leta drugega stoletja pa - v drugo. Poglejmo na primerih.

Tu je prva različica:

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

In tu je druga različica:

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

Recimo zdaj, da želimo najdene števke leta zapisati v spremenljivko. Čaka nas težava, ker ne vemo natančno, s katerim ključem naj vzamemo podatke iz zajete skupine:

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

Težavo lahko rešimo s pogojem:

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

Vendar obstaja enostavnejša rešitev. Uporabiti je mogoče poseben ukaz (?| ). Vse zajete skupine, ki so znotraj njega, bodo imele eno številko.

Popravimo naš regularni izraz

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

In zdaj bo naše leto zagotovo v zajeti skupini s številko ena:

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

Podane so nizi z datumi, pri katerih se leto lahko spreminja od 1990 do 2099:

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

Za vsak datum položite dan v prvo zajeto skupino, mesec v drugo, zadnji dve števki leta pa - v tretjo.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni