Capture two parts of the same string?

Asked

Viewed 39 times

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 the numbers separately and put them each into one 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>)
  • I think I could search using regular expressions in strings. If they always follow this format Diretoria: (aprovação X, de Y)

1 answer

3


You can use the function preg_match.

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 it like 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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.