Preg сопоставление и подсчет полученного совпадения в короткой строке

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

  •  10-07-2019
  •  | 
  •  

Вопрос

У меня уже есть функция, которая подсчитывает количество элементов в строке ($ абзац) и сообщает мне, сколько символов в результате, то есть tsp и tbsp присутствует 7, я могу использовать это, чтобы вычислить процент этого Строка.

Мне нужно усилить это с помощью preg_match, потому что 10tsp должно считаться как 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);

Я знаю, что это будет что-то вроде preg_match ('# [d] + [item] #', $ абзац) верно?

РЕДАКТИРОВАТЬ извините за изогнутый шар, но между числом и элементом $ может быть пробел, может ли один preg_match перехватить оба экземпляра?

Это было полезно?

Решение

Мне не совсем понятно, что вы пытаетесь сделать с помощью регулярного выражения, но если вы просто пытаетесь найти соответствие определенной комбинации измерения чисел, это может помочь:

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

Это вернет количество случаев, когда комбинация измерения числа встречается в $ абзаце .

РЕДАКТИРОВАТЬ переключился на использование preg_match_all для подсчета всех случаев.

Пример подсчета количества совпавших символов:

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

Результат выполнения вышеуказанного:

  

общее количество символов: 11

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top