⊗ppPmRgCPN 257 of 447 menu

Celkový počet zachytávacích skupín v regulárnych výrazoch PHP

Zvážme nasledujúcu situáciu. Predpokladajme, že máme premennú s rokom, ktorý sa môže meniť od 1990 do 2099. Povedzme, že chceme získať posledné dve číslice roku do zachytávacej skupiny. Napíšme zodpovedajúci regulárny výraz:

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

Tu nás však čaká jedna nepríjemnosť. Faktom je, že pre roky minulého storočia dve čísla budú v prvej zachytávacej skupine, zatiaľ čo pre roky druhého storočia - v druhej. Pozrime sa na príkladoch.

Tu je prvá možnosť:

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

A tu je druhá možnosť:

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

Povedzme teraz, že chceme uložiť nájdené číslice roka do premennej. Čaká nás problém, pretože nevieme presne, pod ktorým kľúčom máme získať dáta zo zachytávacej skupiny:

<?php $year = $res[1]; // potrebný je kľúč 1 alebo 2 ?>

Problém môžeme vyriešiť pomocou podmienky:

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

Existuje však jednoduchšie riešenie. Môžeme použiť špeciálny príkaz (?| ). Všetky zachytávacie skupiny, ktoré sa nachádzajú vnútri nej, budú mať rovnaké číslo.

Opravme náš regulárny výraz

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

A teraz bude náš rok určite v zachytávacej skupine s číslom jedna:

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

Sú dané reťazce s dátumami, v ktorých sa rok môže meniť od 1990 do 2099:

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

Pre každý dátum uložte deň do prvej zachytávacej skupiny, mesiac do druhej a posledné dve číslice roka - do tretej.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť