⊗ppPmRgNP 255 of 447 menu

Pojmenované zachytávací skupiny v regulárních výrazech PHP

Předpokládejme, že pomocí preg_match chceme rozdělit datum na den, měsíc a rok. Použijeme k tomu zachytávací skupiny:

<?php $str = '2025-10-29'; $reg = '#(\d{4})-(\d{2})-(\d{2})#'; preg_match($reg, $str, $match); var_dump($match); // vypíše ['2025-10-29', '2025', '10', '29'] ?>

Jak vidíte, ve výsledku dostaneme pole, ve kterém bude na nultém prvku celé datum, na prvním - rok, na druhém - měsíc, na třetím - den.

Někdy by však bylo vhodné získat obsah zachytávacích skupin ve formě asociativního pole. To znamená, že v našem případě by bylo dobré získat takovýto pole:

[ 'year' => '2025', 'month' => '10', 'day' => '29' ]

K tomu existuje v regulárních výrazech speciální syntax. Zde je: (?<name>pattern), kde pattern - to je regulární výraz, a name - to je název zachytávací skupiny.

Přepišme náš regulární výraz pro datum pomocí pojmenovaných zachytávacích skupin:

<?php $str = '2025-10-29'; $reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#'; preg_match($reg, $str, $match); var_dump($match); ?>

Ve výsledku dostaneme asociativní pole, ve kterém budou klíče jména zachytávacích skupin, a hodnoty - to, co se do nich zachytilo:

[ 'year' => '2025', 'month' => '10', 'day' => '29', ]

Ve skutečnosti budou hodnoty zachytávacích skupin v poli s výsledkem dostupné jak podle jména, tak podle pořadového čísla. To znamená, že například rok bude dostupný pod klíčem 'year' a pod číslem 1, měsíc - pod klíčem 'month' a pod číslem 2 a tak dále:

[ 'year' => '2025', 'month' => '10', 'day' => '29', 1 => '2025', 2 => '10', 3 => '29' ]

Popsané pojmenované zachytávací skupiny mají ještě několik alternativních syntaxí: (?P<name>pattern) a (?'name'pattern).

Je dána řetězec s časem:

<?php $str = '12:59:59'; ?>

Uložte hodiny, minuty a sekundy do jednotlivých pojmenovaných zachytávacích skupin.

Napište funkci, která v poli s výsledkem odstraní všechny číslované zachytávací skupiny, ponechá pouze pojmenované.

Č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