亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何選擇一個句子的前10個單詞?

如何選擇一個句子的前10個單詞?

PHP
一只斗牛犬 2019-12-02 09:54:24
我如何從輸出中僅選擇前10個字?
查看完整描述

3 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

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,\.;\?\!]。


查看完整回答
反對 回復 2019-12-02
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

如果在句子結構中有一個意外的字符代替空格,或者如果句子包含多個連在一起的空格,則僅對空格進行拆分將無法正常工作。


無論您在單詞之間使用哪種“空格”,以下版本都可以使用,并且可以輕松擴展以處理其他字符...它目前支持任何空格字符加,。; ?!


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函數的堆棧有點難看:)


查看完整回答
反對 回復 2019-12-02
  • 3 回答
  • 0 關注
  • 462 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號