как ограничить написание смайлов в тексте? скажем только 3 смайла на 1 сообщение все остальные смайлы удаляются... как это сделать?
Как посчитать количество сделанных preg_replace ов тут ? Добавлено спустя 38 минут 37 секунд: подскажите как посчитать количество вхождений с помошью preg_match или preg_match_all тут. Соль в том что нужно чтобы прег реплейс после 3 раза перестал изменять в тексте коды смайлов на изображения и они удалялись дальше тоесть смайлов только 3 Так вот как сделать условие с прег матч алл как это описать чтобы она считала до 3 ?
Я бы сделала удаление лишних смайлов с помощью примерно такого кода: Код (Text): $maxSmiliesNumber = 3; // задаем макс допустимое кол-во смайлов // задаём набор смайликов и шаблоны для замены $arrSmiles = array( ":)" => "---001---", ":(" => "---002---", ":p" => "---003---" ); $text = .... ; // тут будет обрабатываемый текст $totalNumberSmilesReplaced = 0; // будем считать количество замененных смайлов while ($totalNumberSmilesReplaced < $maxSmiliesNumber) { // заменяем первые Х смайликов на шаблоны foreach ($arrSmiliers as $smile => $replace) { // заменяем по 1 смайлику каждого вида $countOfSmilesReplaced = 0 $text = preg_replace($smile, $replace, $text, 1, $countOfSmilesReplaced); // заменяем 1 смайлик $totalNumberSmilesReplaced += $countOfSmilesReplaced; if ($totalNumberSmilesReplaced < $maxSmiliesNumber) continue; // если ещё можно заменять смайлики, продолжаем break; } } // удаляем оставшиеся смайлики foreach ($arrSmiliers as $smile => $replace) { $text = str_replace($smile, '', $text); } // заменяем шаблоны обратно на смайлики foreach ($arrSmiliers as $smile => $replace) { $text = preg_replace($replace, $smile, $text); } В этом коде надо ещё предусмотреть случай, если смайликов в тексте меньше, чем $maxSmiliesNumber, чтобы не получилось бесконечного цикла.