⊗ppPmRgCPN 257 of 447 menu

Número geral de grupos de captura em expressões regulares do PHP

Vamos considerar a seguinte situação. Suponha que temos uma variável com um ano, que pode variar de 1990 a 2099. Suponha que queremos obter os dois últimos dígitos do ano em um grupo de captura. Vamos escrever a expressão regular correspondente:

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

No entanto, há uma inconveniência nos aguardando aqui. O problema é que, para os anos do século passado, os dois dígitos cairão no primeiro grupo de captura, enquanto para os anos do século seguinte - no segundo. Vamos ver com exemplos.

Aqui está a primeira variante:

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

E aqui está a segunda variante:

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

Suponha agora que queremos salvar os dígitos encontrados do ano em uma variável. Temos um problema, pois não sabemos exatamente com qual chave recuperar os dados do grupo de captura:

<?php $year = $res[1]; // precisa da chave 1 ou 2 ?>

É possível resolver o problema com uma condição:

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

No entanto, existe uma solução mais simples. Podemos usar um comando especial (?| ). Todos os grupos de captura que estiverem dentro dele terão o mesmo número.

Vamos corrigir nossa expressão regular

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

E agora nosso ano certamente estará no grupo de captura número um:

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

São dadas strings com datas, nas quais o ano pode variar de 1990 a 2099:

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

Para cada data, coloque o dia no primeiro grupo de captura, o mês no segundo, e os dois últimos dígitos do ano - no terceiro.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar