⊗ppPmRgCPN 257 of 447 menu

Número general de grupos en expresiones regulares de PHP

Consideremos la siguiente situación. Supongamos que tenemos una variable con un año, que puede variar de 1990 a 2099. Supongamos que queremos obtener los dos últimos dígitos del año en un grupo. Escribamos la expresión regular correspondiente:

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

Sin embargo, aquí nos espera un inconveniente. El problema es que para los años del siglo pasado, los dos dígitos caerán en el primer grupo, mientras que para los años del siglo siguiente - en el segundo. Veámoslo con ejemplos.

He aquí la primera opción:

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

Y he aquí la segunda opción:

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

Ahora supongamos que queremos guardar los dígitos del año encontrados en una variable. Nos espera un problema, ya que no sabemos con exactitud con qué clave tomar los datos del grupo:

<?php $year = $res[1]; // se necesita la clave 1 o 2 ?>

Se puede resolver el problema mediante una condición:

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

Sin embargo, existe una solución más simple. Se puede usar el comando especial (?| ). Todos los grupos que se encuentren dentro de ella tendrán el mismo número.

Arreglemos nuestra expresión regular

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

Y ahora nuestro año estará definitivamente en el grupo número uno:

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

Se dan cadenas con fechas, en las que el año puede variar de 1990 a 2099:

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

Para cada fecha, guarde el día en el primer grupo, el mes en el segundo, y los dos últimos dígitos del año - en el tercero.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar