Preg abbina e conta la corrispondenza risultante in una stringa corta
-
10-07-2019 - |
Domanda
Ho già una funzione che conta il numero di elementi in una stringa ($ paragrafo) e mi dice quanti caratteri è il risultato, cioè tsp e tbsp presenti è 7, posso usarlo per calcolare la percentuale di quello stringa è.
Devo rinforzarlo con preg_match perché 10tsp dovrebbe essere considerato come 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);
So che sarebbe qualcosa come preg_match ('# [d] + [item] #', $ paragraph)
giusto?
MODIFICA scusa per la palla curva ma potrebbe esserci uno spazio tra il numero e l'elemento $, si può catturare preg_match in entrambe le istanze?
Soluzione
Non è abbastanza chiaro per me cosa stai cercando di fare con la regex, ma se stai solo cercando di abbinare una particolare combinazione di misurazione dei numeri, questo potrebbe aiutare:
$count = preg_match_all('/\d+\s*(tbsp|tsp|tbs)/', $paragraph);
Questo restituirà il numero di volte in cui si verifica una combinazione di misure numeriche in $ paragraph
.
EDIT è passato a utilizzare preg_match_all
per contare tutte le occorrenze.
Esempio di conteggio del numero di caratteri corrispondenti:
$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);
Output dall'esecuzione di quanto sopra:
numero totale di caratteri: 11