Genoemde groepen in PHP reguliere expressies
Stel dat we met preg_match een
datum willen opbreken in dag, maand en jaar. Laten we
hiervoor groepen gebruiken:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // geeft ['2025-10-29', '2025', '10', '29']
?>
Zoals je ziet, krijgen we als resultaat een array, waarin het nulde element de volledige datum bevat, het eerste - het jaar, het tweede - de maand, het derde - de dag.
Soms zou het echter handig zijn om de inhoud van de groepen te krijgen als een associatieve array. Dat wil zeggen, in ons geval zou het mooi zijn om de volgende array te krijgen:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Hiervoor bestaat er een speciale syntaxis
in reguliere expressies. Hier is hij: (?<name>pattern),
waarbij pattern de reguliere expressie is, en name
- de naam van de groep.
Laten we onze reguliere expressie voor de datum herschrijven met genoemde groepen:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Het resultaat is een associatieve array, waarin de sleutels de namen van de groepen zijn, en de waarden - wat erin is gekomen:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
In werkelijkheid zullen in de resultatenarray de waarden
van de groepen zowel op naam als
op volgnummer toegankelijk zijn. Dat wil zeggen, bijvoorbeeld,
het jaar is toegankelijk via de sleutel 'year'
en op nummer 1, de maand - via de sleutel 'month'
en op nummer 2, enzovoort:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
De beschreven genoemde groepen hebben nog enkele
alternatieve syntaxen: (?P<name>pattern)
en (?'name'pattern).
Gegeven een string met een tijd:
<?php
$str = '12:59:59';
?>
Plaats de uren, minuten en seconden in aparte genoemde groepen.
Schrijf een functie die in de resultatenarray alle genummerde groepen verwijdert, en alleen de genoemde groepen overlaat.