2013-12-16 90 views
1

如何刪除單詞後的兩個單詞?例如,我有這樣的句子,以句號結尾:刪除特定單詞後的兩個單詞

$sentence = 'hello stackoverflow remove string bla bla bla.'; 
$specificword = 'stackoverflow'; 

我想刪除「刪除」和「串」,並將其輸出:

$output = 'hello stackoverflow bla bla bla.'; 

如果可能的另一種更好的選擇將是:如果word1和word2的strlen> 5,如果word1> 5的strlen和word2的strlen < 5,請刪除特定單詞後面的兩個單詞。

+2

嗨,告訴我們你嘗試一下,編輯您的問題,包括你的企圖。 –

回答

1

簡單地刪除這兩個詞,你可以使用str_replace()

$new_sentence = str_replace(array('remove', 'string'), '', $sentence); 

如果你想指定的字符串後檢查兩個詞的長度,那麼你要首先提取的話。您可以使用substr()strpos()指定的單詞後得到句子的部分,然後用explode()與作爲分隔符的空間分割了一句:

$specific_word_pos = strpos($sentence, $specificword) + strlen($specificword); 
$sentence_part = substr($sentence, $specific_word_pos); 
$words = explode(' ', trim($sentence_part)); 

// check the word lengths and do the removal  
if (strlen($words[0]) > 5 && strlen($words[1]) > 5) { 
    $new_sentence = str_replace(array('remove', 'string'), '', $sentence); 
} else { 
    // some code 
} 

echo $new_sentence; // => hello stackoverflow bla bla bla. 

Demo.

+0

謝謝阿邁勒,工作非常好。我替換這一行:'$ new_sentence = str_replace(array($ words [0],$ words [1]),'',$ sentence);'以防我們不知道單詞。 – mwweb

+0

@mwweb:是的,這是一個好主意。很高興有幫助:)請將此答案標記爲** [接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)* *如果它回答你的問題:) –

+0

Amal是否可以選擇不使用'explode'來爆炸字符串?因爲我認爲使用大字符串表現緩慢。謝謝 – mwweb

0

你可以使用正則表達式積極向後看這樣做。

$s = 'hello stackoverflow remove string bla bla bla.'; 

$output = preg_replace('/(?<=stackoverflow)(\s+)\w{5,}\s+\w{5,}\s+/ui', '$1', $s); 

echo $output, PHP_EOL; // hello stackoverflow bla bla bla. 

(?<=stackoverflow)告訴它必須通過「計算器」前面的格局,無論你是$specifiedword替換此。我們用正面看後面說,「計算器後面兩個字是用空格分隔長至少五個字符」

  • (?<=stackoverflow) - 正回顧後,以匹配特定的字
  • \s+ - 一個或多個空格字符
  • \w{5,} - 至少五個單詞字符
+0

謝謝克里斯。我認爲這將比Amal Murali的表現要快得多,我是對嗎? – mwweb

+0

也許。老實說,我不太瞭解PHP正則表達式引擎的內部結構,以便爲您提供一個很好的答案。 – chrisguitarguy