0 votes

Correspondance Preg et comptage de la correspondance résultante dans une courte chaîne

J'ai déjà une fonction qui compte le nombre d'éléments dans une chaîne de caractères ($paragraph) et me dit combien de caractères le résultat est, c'est-à-dire tsp et tbsp présents correspondent à 7, je peux utiliser cela pour calculer le pourcentage de cette chaîne.

J'ai besoin de renforcer cela avec preg_match car 10tsp devrait compter comme 5.

$characters = strlen($paragraph);
$items = array("tsp", "tbsp", "tbs");
$count = 0;

foreach($items as $item) {

    //Compter le nombre de fois où le format est dans le paragraphe
    $countitems = substr_count($paragraph, $item);
    $countlength= (strlen($item)*$countitems);

    $count = $count+$countlength;
}

$overallpercent = ((100/$characters)*$count);

Je sais que ce serait quelque chose comme preg_match('#[d]+[item]#', $paragraph) n'est-ce pas?

MODIFICATION désolé pour le changement de cap mais il pourrait y avoir un espace entre le nombre et l'$item, est-ce qu'un preg_match peut capturer les deux cas?

3voto

jheddings Points 10510

Il n'est pas tout à fait clair pour moi ce que vous essayez de faire avec l'expression régulière, mais si vous essayez simplement de trouver une combinaison nombre-mesure particulière, cela pourrait vous aider:

$count = preg_match_all('/\d+\s*(tbsp|tsp|tbs)/', $paragraph);

Cela retournera le nombre de fois où une combinaison nombre-mesure apparaît dans $paragraph.

MODIFICATION : Utilisation de preg_match_all pour compter toutes les occurrences.

Exemple pour compter le nombre de caractères correspondants :

$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("nombre total de caractères : %d\n", $charcnt);

Résultat de l'exécution du code ci-dessus :

nombre total de caractères : 11

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X