⊗ppPmRgCPN 257 of 447 menu

Numéro général des groupes de capture dans les regex PHP

Considérons la situation suivante. Supposons que nous ayons une variable avec une année, qui peut varier de 1990 à 2099. Supposons que nous voulions récupérer les deux derniers chiffres de l'année dans un groupe de capture. Écrivons l'expression régulière correspondante :

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

Cependant, nous rencontrons ici un inconvénient. Le fait est que pour les années du siècle dernier, les deux chiffres iront dans le premier groupe de capture, tandis que pour les années du siècle suivant - dans le second. Regardons avec des exemples.

Voici le premier cas :

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

Et voici le second cas :

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

Supposons maintenant que nous voulions enregistrer les chiffres trouvés de l'année dans une variable. Nous rencontrons un problème, car nous ne savons pas exactement avec quelle clé récupérer les données du groupe de capture :

<?php $year = $res[1]; // besoin de la clé 1 ou 2 ?>

On peut résoudre le problème avec une condition :

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

Cependant, il existe une solution plus simple. On peut utiliser la commande spéciale (?| ). Tous les groupes de capture qui se trouvent à l'intérieur auront le même numéro.

Corrigeons notre expression régulière

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

Et maintenant notre année sera certainement dans le groupe de capture numéro un :

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

Voici des chaînes de caractères avec des dates, dans lesquelles l'année peut varier de 1990 à 2099 :

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

Pour chaque date, placez le jour dans le premier groupe de capture, le mois dans le second, et les deux derniers chiffres de l'année - dans le troisième.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser