Задать вопрос
@phpcoder81

Как обрезать длинное слово?

Есть полноценный текст UTF-8 (абзацы, пробелы).
В нем есть слова более 20 символов (к примеру).
Нужно ограничить каждое слоо длиной 20 символов, а всё остальное просто стереть.
Я так понимаю, тут простое регулярное выражение нужно. Если да, то как оно должно выглядеть?
  • Вопрос задан
  • 290 просмотров
Подписаться 3 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 3
@pocifis
PHP-разработчик
$text = preg_replace_callback('/[\w-]{21,}/ui',
    function ($matches) { 
        return mb_substr($matches[0], 0, 20); 
    },
$text);


Символ "-" добавил для слов через дефис, если не нужно, можете убрать.
Ответ написан
@Dizzy221
PHP Программист
<?php
$string = 'слово1, слово2 длинноолов1 слово3: слово4. длинноесловоболее20символов';

function getWordsFromString($string)
{
    if (preg_match_all("/\b(\w+)\b/ui", $string, $matches)) {
        return $matches[1];
    }
    return $matches;
}

$matches = getWordsFromString($string);

	foreach($matches as $key => $m) {
		if (mb_strlen($m, 'UTF-8') > 20) {
			unset($matches[$key]);
		}
	}
print_r($matches);


Возвращает
Array ( [0] => слово1 [1] => слово2 [2] => длинноолов1 [3] => слово3 [4] => слово4 )
Ответ написан
@Snewer
$str = 'ваша строка';
echo preg_replace('/(\w{20})\w+/u', '$1', $str);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы