Preg correspondant et en comptant la correspondance résultante dans une courte chaîne

StackOverflow https://stackoverflow.com/questions/1822952

  •  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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top