如何选择一个句子的前10个单词?

我如何从输出中仅选择前10个字?



一只斗牛犬
浏览 435回答 3
3回答

一只甜甜圈

implode(' ', array_slice(explode(' ', $sentence), 0, 10));要增加对其他分词符(例如逗号和破折号)的支持,可以preg_match提供一种快速的方法,并且不需要拆分字符串:function get_words($sentence, $count = 10) {  preg_match("/(?:\w+(?:\W+|$)){0,$count}/", $sentence, $matches);  return $matches[0];}作为Pebbl提到,PHP不处理UTF-8或Unicode那么好,所以如果这是一个问题,那么你可以替换\w为[^\s,\.;\?\!]与\W对[\s,\.;\?\!]。

largeQ

如果在句子结构中有一个意外的字符代替空格,或者如果句子包含多个连在一起的空格,则仅对空格进行拆分将无法正常工作。无论您在单词之间使用哪种“空格”,以下版本都可以使用,并且可以轻松扩展以处理其他字符...它目前支持任何空格字符加,。; ?!function get_snippet( $str, $wordCount = 10 ) {  return implode(     '',     array_slice(       preg_split(        '/([\s,\.;\?\!]+)/',         $str,         $wordCount*2+1,         PREG_SPLIT_DELIM_CAPTURE      ),      0,      $wordCount*2-1    )  );}正则表达式非常适合此问题,因为您可以轻松地使代码随心所欲地灵活或严格。但是,您一定要小心。我专门针对上述单词之间的差异(而不是单词本身)进行了上述处理,因为很难明确地说明单词的定义。取\w边界一词或其倒数\W。我很少依赖这些,主要是因为-根据您使用的软件(例如某些版本的PHP)- 它们并不总是包含UTF-8或Unicode字符。在正则表达式中,最好始终保持具体。这样,无论在何处呈现表达式,表达式都可以处理以下内容:echo get_snippet('Это не те дроиды, которые вы ищете', 5);/// outputs: Это не те дроиды, которые但是,就性能而言,避免拆分可能是值得的。所以,你可以用凯利的更新方法,但切换\w为[^\s,\.;\?\!]+与\W对[\s,\.;\?\!]+。尽管就我个人而言,我喜欢上面使用的拆分表达式的简单性,但它更易于阅读和修改。但是,PHP函数的堆栈有点难看:)
打开App,查看更多内容
随时随地看视频慕课网APP