从字符串中获取一定数量的随机单词

时间:2011-09-11 19:25:04

标签: php arrays string

像:

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个元素,但我得到了所有标点符号和其他字符。我只想要a-z字符。这些词也需要至少有3个字符

4 个答案:

答案 0 :(得分:1)

使用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);

答案 1 :(得分:1)

您可以使用内置str_word_count

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

<强> See it in action

如果您担心性能问题,您还可以使用其他方式(例如array_rand)从$words数组中挑选随机字词;这是最方便的。

答案 2 :(得分:0)

只需删除不需要的字符

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

并按字长过滤

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

答案 3 :(得分:0)

$ string = preg_replace(“/ [^ a-z] + / i”,“”,$ string);

在你做爆炸之前