Preg correspondência e contagem da correspondência resultante em uma corda curta
-
10-07-2019 - |
Pergunta
Eu já tenho uma função que conta o número de itens em uma string ($ parágrafo) e me diz quantos caracteres o resultado é, ou seja, TSP e TBSP Present é 7, posso usar isso para descobrir a porcentagem dessa string.
Preciso reforçar isso com preg_match porque o 10TSP deve contar como 5.
$characters = strlen($paragraph);
$items = array("tsp", "tbsp", "tbs");
$count = 0;
foreach($items as $item) {
//Count the number of times the formatting is in the paragraph
$countitems = substr_count($paragraph, $item);
$countlength= (strlen($item)*$countitems);
$count = $count+$countlength;
}
$overallpercent = ((100/$characters)*$count);
Eu sei que seria algo como preg_match('#[d]+[item]#', $paragraph)
certo?
EDITAR Desculpe pela bola curva, mas pode haver um espaço entre o número e o item $, um preg_match pode capturar as duas instâncias?
Solução
Não está claro para mim o que você está tentando fazer com o Regex, mas se você está apenas tentando combinar para uma combinação específica de medição de número, isso pode ajudar:
$count = preg_match_all('/\d+\s*(tbsp|tsp|tbs)/', $paragraph);
Isso retornará o número de vezes uma combinação de medição numérica ocorre em $paragraph
.
EDITAR mudou para uso preg_match_all
para contar todas as ocorrências.
Exemplo para contar o número de caracteres correspondentes:
$paragraph = "5tbsp and 10 tsp";
$charcnt = 0;
$matches = array();
if (preg_match_all('/\d+\s*(tbsp|tsp|tbs)/', $paragraph, $matches) > 0) {
foreach ($matches[0] as $match) { $charcnt += strlen($match); }
}
printf("total number of characters: %d\n", $charcnt);
Saída da execução do acima:
Número total de caracteres: 11