2012-03-12 138 views
0

我需要在單詞或單詞任何其他字符的中間確切的搜索詞相同的字符或類似性質不發一言。 該程序是在PHP中。 在此先感謝。提取開始從字符串中特定字母在PHP

+3

我們需要你發佈你的嘗試到目前爲止。由於 – 2012-03-12 07:27:22

+0

如果我搜索一個詞與COC它會顯示庫謝開始,科欽我不想,我需要確切的詞與科欽 – 2012-03-12 07:30:02

+0

開始你需要找回在句子中的位置?或者提取以$針開頭的實際單詞?而你的意思是「相似」? – 2012-03-12 07:30:53

回答

1

只是爲了演示絕對相匹配的非正則表達式的解決方案:

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (substr($item,0,strlen($needle) == $needle)); 
         } 
         ); 

編輯

說明:

str_word_count()函數的第二個參數1或2返回$ string中所有單詞的數組。這比在空間上爆炸要好,因爲它也會考慮其他標點符號(例如「科欽」之後的逗號)。

詞語進行陣列然後用過濾的回調(定義爲一個lambda或匿名功能)進料至array_filter()功能,一起。 lambda爲數組參數中的每個條目($ item)返回true或false:如果該條目的真實值包含在$ matches中;如果是假的,那麼它不是。

定義的拉姆達函數傳遞每個$項目依次(陣列條目),並且還$針(由「使用」條款的方式)。它只是比較$ item值的第一個字符和針,並根據匹配返回true或false。請注意,這是一個區分大小寫的比較。如果你想不區分大小寫,你可以在比較之前使用strtoupper()或strtolower()來對付substr()值和$ needle值。

如果你想要一個「類似」的比賽,那麼你可以取代在$項目和$針的levenshtein()similar_text()值的比較lambda函數的比較,以%年齡相似(或可能的metaphone()功能)來確定它們是否應該被認爲是相似的。

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really; and "couchey" is pretty cool too'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (levenshtein($item,$needle,1,1,0) == 0); 
         } 
         ); 
+0

我需要對此進行解釋。我認爲這可能有幫助,我接受但需要說明 – 2012-03-12 07:59:22

0

你正在尋找的正則表達式是\b(NEEDLE\w+)。像這樣:

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

if (preg_match('/\b(' . preg_quote($needle, '/') . '\w+)/', $sentence, $match)) { 
    echo $match[1]; 
} 
+0

這不是有益的,我需要有點類似的話沒有太多的不同的詞感謝您的答覆 – 2012-03-12 07:48:31

+0

遺憾的是,基於對你的問題的一句話描述你的含糊一個跑,我不能完全滿足您的需求 – deceze 2012-03-12 08:15:36

+0

感謝您事先我試圖發展句子形成 – 2012-03-12 09:47:32

相關問題