Preg сопоставление и подсчет полученного совпадения в короткой строке
-
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