⊗ppPmRgCPN 257 of 447 menu

Üldine taskute arv regulaaravaldistes PHP-s

Vaatleme järgmist olukorda. Oletame, et meil on muutuja aastaga, mis võib muutuda alates 1990 kuni 2099. Oletame, et tahame saada aasta kahte viimast numbrit taskusse. Kirjutame vastava regulaaravaldise:

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

Siiski ootab meid siin üks ebamugavus. Asi on selles, et möödunud sajandi aastate puhul kaks numbrit satuvad esimesse taskusse, aga teise sajandi aastate puhul - teise. Vaatame näidetel.

Siin on esimene variant:

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

Ja siin on teine variant:

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

Oletame nüüd, et tahame leitud aasta numbrid kirjutada muutujasse. Meid ootab probleem, sest me ei tea täpselt, millise võtmega andmeid taskust võtta:

<?php $year = $res[1]; // vaja võtit kas 1 või 2 ?>

Probleemi saab lahendada tingimuslausega:

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

Siiski on olemas lihtsam lahendus. Saab kasutada spetsiaalset käsku (?| ). Kõik taskud, mis asuvad selle sees, saavad ühe numbri.

Parandame oma regulaaravaldist

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

Ja nüüd on meie aasta kindlasti taskus number üks:

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

Antud on stringid kuupäevadega, milles aasta võib muutuda alates 1990 kuni 2099:

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

Iga kuupäeva puhul pange päev esimesse taskusse, kuu teise, ja aasta kaks viimast numbrit - kolmandasse.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu