Preg correspondant et en comptant la correspondance résultante dans une courte chaîne
-
10-07-2019 - |
Question
J'ai déjà une fonction qui compte le nombre d'éléments d'une chaîne ($ paragraphe) et m'indique le nombre de caractères du résultat, c'est-à-dire que tsp et tbsp présentent 7, je peux l'utiliser pour calculer le pourcentage de cette la chaîne est.
Je dois renforcer cela avec preg_match car 10tsp devrait compter pour 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);
Je sais que ce serait quelque chose comme preg_match ('# [d] + [item] #', $ paragraph)
non?
EDIT désolé pour la courbe mais il pourrait y avoir un espace entre le nombre et le $ item, un preg_match peut-il intercepter les deux instances?
La solution
Je ne vois pas très bien ce que vous essayez de faire avec l'expression régulière, mais si vous essayez simplement de faire correspondre une combinaison donnée-mesure, cela pourrait aider:
$count = preg_match_all('/\d+\s*(tbsp|tsp|tbs)/', $paragraph);
Ceci renverra le nombre de fois où une combinaison nombre-mesure est produite dans $ paragraph
.
EDIT a choisi d'utiliser preg_match_all
pour compter toutes les occurrences.
Exemple de comptage du 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("total number of characters: %d\n", $charcnt);
Résultat de l'exécution de ce qui précède:
nombre total de caractères: 11