2013-03-03 48 views
2

我正在尋找一種方式來找到另一句話紀錄 -

例如句子出現的次數(只計算的話(沒有正則表達式如果可能的話)(PHP)我有):

Do you have a different language or operating system? JavaScript is currently disabled in your browser and is required to 

,我正在尋找:

一個

這應該送給我的結果:

結果= 1

,因爲如果算上一個作爲一個詞,而不是作爲一個字符,你會得到1的結果是:

「做你有a不同的語言或操作系統? JavaScript在您的瀏覽器目前已停用,並要求」 錠

+1

我瘦你正在尋找[substr_count()](http://php.net/manual/en/function.substr-count.php) – 2013-03-03 21:31:05

回答

1

確實使用substr_count

爲了確保您只匹配的話:。之前和單詞後面添加一個空格使用substr_count之前,明確檢查。在使用substr開始或字符串的末尾字

+0

或者添加一個空格的開始和結束字,像'「」。 $字符串。 「」,然後通過一次調用'substr_count()'來計算''一個''''。 – Eric 2013-03-03 21:36:47

+0

這正是我的意思是Eric,但是你在開始時會錯過'a',並且在字符串末尾會錯過'a',因此請做兩次額外的'substr'檢查。 – 2013-03-03 21:38:45

+0

您也可以明確地檢查該案例。使用正則表達式可以匹配可選的點。 – 2013-03-03 21:42:16

1

至於計數的次數的詞「一」用在字符串中使用快速/簡單:

$sent = "Do you have a different language or operating system? JavaScript is currently disabled in your browser and is required to"; 

if(preg_match('/ a /', $sent, $matches)) { # a space before and after makes it a word not a letter. 
    echo count($matches);    
} 

但是,在所有的情況下,仍然不會告訴你有多少句話是肯定的;要做到這一點需要一個非常複雜的正則表達式。

- >編輯:

得到了這個詞「一」在句子的開頭和其他地方,你可以這樣做:

$sent = "A different language or operating system? JavaScript is currently disabled in your browser and is required to eat a walrus"; 

$patterns = array('/ a /', '/A /'); 
$ctr = 0; 

foreach($patterns as $p) { 

    if(preg_match($p, $sent, $matches)) { 
     $ctr += count($matches);    
    } 

} 

echo $ctr; 
+0

OP要求它沒有正則表達式如果可能的話(它*是*可能的)。 – Eric 2013-03-03 21:42:53

+0

他也在「尋找一種方法來查找另一句話中的句子出現次數」,如果沒有正則表達式,這可能是不可能的。 @Eric – 2013-03-03 21:52:52

+0

這也可能沒有正則表達式。 – Eric 2013-03-03 21:55:17

0

不是最有效的解決方案,但似乎給你你需要的東西。

$search = 'a'; 
$str = "Do you have a different language or operating system? JavaScript is currently disabled in your browser and is required to"; 
$count = array_sum(array_map(function($val) use ($search) {if ($val == $search) { return 1; } else { return 0; }}, str_word_count($str, 1))); 
+0

查看[str_word_count]的文檔(http://php.net/manual/en/function.str-word-count.php)。注意:這可能會得到相當粗糙的大塊文字 – GeoffK 2013-03-03 21:45:55

+0

好像科特梅斯解決方案可以更好,我錯了嗎? – dinbrca 2013-03-04 14:46:53

+0

如果執行速度是一個問題,這可能是一個更好的解決方案。仍然 - 他們都做的伎倆:)你可以用我的解決方案中的array_map替換[array_count_values](http://php.net/manual/en/function.array-count-values.php)使它看起來不那麼複雜,但最終達到相同的目的。 – GeoffK 2013-03-04 17:47:22