Получить определенное количество случайных слов из строки

Подобно:

The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog. Junk MTV quiz graced by fox whelps. Bawds jog, flick quartz, vex nymphs. Waltz, bad nymph, for quick jigs vex! Fox nymphs grab quick-jived waltz. Brick quiz whangs jumpy veldt fox. Bright vixens jump; dozy fowl quack. Quick wafting zephyrs vex bold Jim. Quick zephyrs blow, vexing daft Jim. 

(это всего лишь образец текста, реальный – намного длиннее)

Как я могу получить, скажем, 5 слов из этого текста?

Я попытался использовать explode(' ', $text); Затем перетасовываем массив и выбираем из него 5 элементов, но я получаю все знаки препинания и другие символы. Я просто хочу az персонажей. Также слова должны иметь не менее 3 символов

Вы можете использовать встроенный str_word_count для этого:

 $words = str_word_count($str, 1); shuffle($words); $selection = array_slice($words, 0, 5); 

Смотрите в действии .

Вы также можете использовать другой способ (например, array_rand ) для выбора случайных слов из массива $words если вас беспокоит производительность; это просто самое удобное.

Используйте preg_split :

 $words = preg_split('#[^a-z0-9]+#', $string, -1, PREG_SPLIT_NO_EMPTY); $key = array_rand($words); return $words[$key]; 

Это разделит строку на любую последовательность букв без буквенно-цифровых символов.

Если вы работаете с данными utf-8, попробуйте это вместо этого:

 $words = preg_split('#[^\pL\pN]+#u', $string, -1, PREG_SPLIT_NO_EMPTY); 

Просто удалите ненужные символы

 $words = explode(' ', $string); $words = array_map (function ($word) { trim($word, '.,-:;"\''); }, $words); 

и фильтровать по длине слова

 $words = array_filter($words, function($word) { return strlen($word) > 2; }, $words); 

$ string = preg_replace ("/ [^ az] + / i", "", $ string);

прежде чем вы взорвете