⊗ppPmRgCPN 257 of 447 menu

A zsebek összeszámlálásának módja a PHP reguláris kifejezéseiben

Vizsgáljuk meg a következő helyzetet. Tegyük fel, hogy van egy változónk egy évvel, amely változhat 1990 és 2099 között. Tegyük fel, hogy az év utolsó két számjegyét szeretnénk megkapni egy zsebben. Írjuk meg a megfelelő reguláris kifejezést:

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

Itt azonban vár ránk egy kellemetlenség. Az a helyzet, hogy az elmúlt század éveire a két számjegy az első zsebbe kerül, míg a második század éveire - a másodikba. Nézzük meg példákon.

Itt az első változat:

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

És itt a második változat:

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

Tegyük fel most, hogy a talált év számjegyeit egy változóba szeretnénk menteni. Probléma vár ránk, hiszen nem tudjuk pontosan, melyik kulccsal vegyük ki az adatokat a zsebből:

<?php $year = $res[1]; // 1-es vagy 2-es kulcs kell ?>

A probléma megoldható feltétellel:

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

Van azonban egy egyszerűbb megoldás is. Használhatjuk a speciális (?| ) parancsot. Minden zseb, amely ezen belül van, ugyanazt a számot kapja.

Javítsuk a reguláris kifejezésünket

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

És most az évünk biztosan az egyes számú zsebben lesz:

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

Adottak dátumokat tartalmazó sztringek, amelyekben az év változhat 1990 és 2099 között:

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

Minden dátum esetén tegye a napot az első zsebbe, a hónapot a másodikba, az év utolsó két számjegyét pedig a harmadikba.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás