2013-04-23 186 views
6

對不起,我剛剛發現一個新問題,因爲我的問題是: Get The Number of Sepecific String Inside String計算字符串內特定字符的數量

我一直在努力,如何找到字符串內特定字符的數量?這種情況是這樣的。

function get_num_chars($char) { 
    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1' 
} 

如果我通過get_num_chars(M) would return 2 如果我通過get_num_chars(M-1) would return 1

我試過count_chars()substr_count()但它不工作。

+1

的問題是,當一些含有'K-1'它也包含'K'。該函數應該如何知道不算這些?您需要更仔細地定義問題。 – Barmar 2013-04-23 06:53:11

+0

@Barmar:OP沒有指定'K-1'不應該匹配? – Aquillo 2013-04-23 06:54:05

+0

@Aquillo他指定了......他希望如果(M)返回2並且如果(M-1)返回1 ....「Barmar」是正確的。 – sandy 2013-04-23 06:55:35

回答

5

使用正則表達式的可能解決方案:

function get_num_chars($char) { 
    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'; 
    return preg_match_all('/'.$char.'(?=,|$)/', $string, $m); 
} 

echo get_num_chars('M'); // 2 
echo get_num_chars('M-1'); // 1 
echo get_num_chars('M-2'); // 1 
echo get_num_chars('K'); // 1 
echo get_num_chars('K-1'); // 1 
+0

'+ 1'爲完整示例 – Aquillo 2013-04-23 07:18:27

+0

太棒了!非常感謝你Randle它完美的工作。我只需要了解(?=,| $)。 – 2013-04-23 07:18:59

+0

在regular-expression.info上查找「lookaround」 – Barmar 2013-04-23 07:20:25

11

這是可能的substr_count()

我覺得你是不是在它傳遞的值正確嘗試這樣

$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'; 

echo substr_count($string, 'K-1');//echo's 1 

echo substr_count($string, 'K');// echo's 2 
+0

他希望第二個迴應'1',而不是'2'。 – Barmar 2013-04-23 06:52:04

+0

是的。 Barmar是對的。 搜索'K'時,不包括'K-1'。因此,substr_count($ string,'K')應該是1 – 2013-04-23 06:54:48

+0

可能的解決方案:在'K-1'被計數之後,'$ string = str_replace('K-1','',$ string)''。 – mgutt 2015-04-10 10:23:40

0

試試這個,它可能不是可行的,但解決你的問題

function get_num_chars($char) { 

    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'; 
    echo substr_count($string, $char); 
} 
get_num_chars('M,'); 
get_num_chars('M-1'); 
get_num_chars('k,'); 
+0

那麼如果最後一個charset以'K'結尾呢?最後沒有逗號。 – Aquillo 2013-04-23 06:58:44

+0

如前所述,搜索K時的字符串也將匹配K-1。因此編碼員需要徹底檢查他的輸入。 – sandy 2013-04-23 07:01:46

+0

是的,但是說'$ string ='120201M,121212M-1,21121212M,232323M-2,33232K,323232K-1,2323K';'。最後一項不會與'K'匹配,' – Aquillo 2013-04-23 07:03:06

1
$k_count = substr_count($string, 'K') - substr_count($string, 'K-'); 
$k1_count = substr_count($string, 'K-1'); 

Counting K not followed by dash如下:

$k_count = preg_match_all('/*K(?!-)/*', $string, $out); 
+0

這個看起來很酷...... – sandy 2013-04-23 07:04:01

+0

@Aquillo:天才! 很棒......!它解決了我的問題。謝謝! – 2013-04-23 07:15:55

+0

不客氣。 – Aquillo 2013-04-23 07:16:59

1

試試這個

$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'; 

$wordCounts = array_count_values(str_word_count($string,1)); 

echo $mCount = (isset($wordCounts['M-'])) ? $wordCounts['M'] : 0; 

但這裏有一件事你可以只通過 'M-' 或 'M' 不 'M-1' 是一些解決方法你想要什麼。 Beacuse str_word_count與確切使用的字數相符。

0

檢查這一點,

$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'; 
$arrString = explode($string,'M'); 
echo $stringCount = count($arrString);