Pregunta

Ya tengo una función que cuenta el número de elementos en una cadena ($ párrafo) y me dice cuántos caracteres tiene el resultado, es decir, tsp y tbsp presente es 7, puedo usar esto para calcular el porcentaje de ese cadena es.

Necesito reforzar esto con preg_match porque 10tsp debería 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);

Sé que sería algo así como preg_match ('# [d] + [item] #', $ párrafo) ¿verdad?

EDITAR perdón por la bola curva pero puede haber un espacio entre el número y el elemento $, ¿puede uno preg_match atrapar ambas instancias?

¿Fue útil?

Solución

No está muy claro para mí qué está tratando de hacer con la expresión regular, pero si solo está tratando de hacer coincidir una combinación particular de medición de números, esto podría ayudar:

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

Esto devolverá la cantidad de veces que se produce una combinación de medición de número en $ párrafo .

EDITAR cambió para usar preg_match_all para contar todas las ocurrencias.

Ejemplo para contar el número de caracteres coincidentes:

$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);

Salida de ejecutar lo anterior:

  

número total de caracteres: 11

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top