⊗ppPmRgCPN 257 of 447 menu

Numărul total de grupuri de captură în expresiile regulate PHP

Să luăm în considerare următoarea situație. Să presupunem că avem o variabilă cu un an care poate varia de la 1990 la 2099. Să presupunem că vrem să obținem ultimele două cifre ale anului într-un grup de captură. Să scriem expresia regulată corespunzătoare:

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

Cu toate acestea, aici ne așteaptă un inconvenient. Cert este că pentru anii secolului trecut, cele două cifre vor ajunge în primul grup de captură, iar pentru anii secolului al doilea - în al doilea. Să vedem cu exemple.

Iată prima variantă:

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

Iar aici este a doua variantă:

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

Să presupunem acum că vrem să scriem cifrele găsite ale anului într-o variabilă. Ne așteaptă o problemă, deoarece nu știm exact cu ce cheie să luăm datele din grupul de captură:

<?php $year = $res[1]; // este nevoie de cheia 1 sau 2 ?>

Problema poate fi rezolvată printr-o condiție:

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

Cu toate acestea, există o soluție mai simplă. Se poate folosi comanda specială (?| ). Toate grupurile de captură care se află în interiorul ei vor avea același număr.

Să corectăm expresia noastră regulată

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

Și acum anul nostru va fi cu siguranță în grupul de captură cu numărul unu:

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

Sunt date șiruri cu date, în care anul poate varia de la 1990 la 2099:

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

Pentru fiecare dată, plasați ziua în primul grup de captură, luna în al doilea, iar ultimele două cifre ale anului - în al treilea.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge