⊗ppPmRgNP 255 of 447 menu

Namngivna capture-grupper i PHP regex

Låt oss säga att vi med preg_match vill dela upp ett datum på dag, månad och år. Vi använder capture-grupper för detta:

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

Som du ser får vi ett array som resultat, där element noll innehåller hela datumet, element ett - året, element två - månaden, element tre - dagen.

Ibland vore det dock bekvämt att få innehållet i capture-grupperna som en associativ array. Det vill säga i vårt fall vore det bra att få följande array:

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

För detta finns en speciell syntax i regex. Här är den: (?<name>pattern), där pattern är regex-mönstret, och name är namnet på capture-gruppen.

Låt oss skriva om vårt datum-regex med namngivna capture-grupper:

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

Som ett resultat kommer vi att få en associativ array, där nycklarna är namnen på capture-grupperna, och värdena är det som hamnade i dem:

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

I verkligheten kommer värdena från capture-grupperna i resultatarrayen att vara tillgängliga både med namn och med ordningsnummer. Det vill säga, till exempel, kommer året att vara tillgängligt med nyckeln 'year' och med numret 1, månaden - med nyckeln 'month' och med numret 2, och så vidare:

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

De beskrivna namngivna capture-grupperna har ytterligare några alternativa syntaxer: (?P<name>pattern) och (?'name'pattern).

Given en sträng med en tid:

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

Lägg timmar, minuter och sekunder i separata namngivna capture-grupper.

Skriv en funktion som i arrayen med resultatet raderar alla numrerade capture-grupper, och endast lämnar kvar de namngivna.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa