Capture two parts of the same string?

2

I have a list of names that follow this structure:

Diretoria: (aprovação 23, de 2014)
Diretoria: (aprovação 42, de 2015)
Diretoria: (aprovação 70, de 2016)

How do I capture numbers separately and put them each in span ? to look like this:

Diretoria: (aprovação <span class="caixa_23">23</span>, de <span class="ano_2014">2014<span>)
Diretoria: (aprovação <span class="caixa_42">42</span>, de <span class="ano_2014">2015<span>)
Diretoria: (aprovação <span class="caixa_70">70</span>, de <span class="ano_2016">2014<span>)
    
asked by anonymous 18.10.2016 / 23:20

1 answer

3

You can use the preg_match function.

Assuming the list of names is a array like this:

$nomes = ['Diretoria: (aprovação 23, de 2014)',
          'Diretoria: (aprovação 42, de 2015)',
          'Diretoria: (aprovação 70, de 2016)'];

$spans = [];

You can do this:

foreach ($nomes as $nome) {
    if (preg_match('/\(aprovação (\d+), de (\d+)\)/', $nome, $retorno) !== false) {
        $num = $retorno[1];
        $ano = $retorno[2];

        $spans[] = "Diretoria: (aprovação <span class=\"caixa_$num\">$num</span>, de <span class=\"ano_$ano\">$ano<span>)";
    }
}

To show the result:

foreach ($spans as $span) {
    echo $span . "\n";
}

See DEMO

    
18.10.2016 / 23:53