⊗ppPmRgCPN 257 of 447 menu

Celkový počet zachytávacích skupin v regulárních výrazech PHP

Uvažujme následující situaci. Předpokládejme, že máme proměnnou s rokem, který se může měnit od 1990 do 2099. Řekněme, že chceme získat poslední dvě číslice roku do zachytávací skupiny. Napišme odpovídající regulární výraz:

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

Zde na nás však čeká jedno nepohodlí. Jde o to, že pro roky minulého století se dvě číslice dostanou do první zachytávací skupiny, zatímco pro roky druhého století - do druhé. Podívejme se na příklady.

Zde je první varianta:

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

A zde je druhá varianta:

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

Řekněme nyní, že chceme zapsat nalezené číslice roku do proměnné. Čeká nás problém, protože nevíme přesně, pod jakým klíčem vzít data ze zachytávací skupiny:

<?php $year = $res[1]; // je potřeba klíč buď 1, nebo 2 ?>

Problém lze vyřešit pomocí podmínky:

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

Existuje však jednodušší řešení. Lze použít speciální příkaz (?| ). Všechny zachytávací skupiny, které se nacházejí uvnitř ní, budou mít stejné číslo.

Pojďme opravit náš regulární výraz

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

A nyní bude náš rok určitě v zachytávací skupině s číslem jedna:

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

Jsou dány řetězce s daty, ve kterých se rok může měnit od 1990 do 2099:

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

Pro každé datum vložte den do první zachytávací skupiny, měsíc do druhé a poslední dvě číslice roku - do třetí.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout