substr_count

(PHP 4, PHP 5)

substr_count -- Count the number of substring occurrences

说明

int substr_count ( string haystack, string needle [, int offset [, int length]] )

substr_count() returns the number of times the needle substring occurs in the haystack string. Please note that needle is case sensitive.

注: This function doesn't count overlapped substrings. See the example below!

参数

haystack

The string to search in

needle

The substring to search for

offset

The offset where to start counting

length

The maximum length after the specified offset to search for the substring. It outputs a warning if the offset plus the length is greater than the haystack length.

返回值

This functions returns an integer.

更新日志

版本说明
5.1.0 Added the offset and the length parameters

范例

例子 1. A substr_count() example

<?php
$text
= 'This is a test';
echo
strlen($text); // 14

echo substr_count($text, 'is'); // 2

// the string is reduced to 's is a test', so it prints 1
echo substr_count($text, 'is', 3);

// the text is reduced to 's i', so it prints 0
echo substr_count($text, 'is', 3, 3);

// generates a warning because 5+10 > 14
echo substr_count($text, 'is', 5, 10);


// prints only 1, because it doesn't count overlapped subtrings
$text2 = 'gcdgcdgcd';
echo
substr_count($text2, 'gcdgcd');
?>


add a note add a note User Contributed Notes
XinfoX X at X XkarlX X-X XphilippX X dot X XdeX
22-Dec-2003 05:27
Yet another reference to the "cgcgcgcgcgcgc" example posted by "chris at pecoraro dot net":

Your request can be fulfilled with the Perl compatible regular expressions and their lookahead and lookbehind features.

The example

 $number_of_full_pattern = preg_match_all('/(cgc)/', "cgcgcgcgcgcgcg", $chunks);

works like the substr_count function. The variable $number_of_full_pattern has the value 3, because the default behavior of Perl compatible regular expressions is to consume the characters of the string subject that were matched by the (sub)pattern. That is, the pointer will be moved to the end of the matched substring.
But we can use the lookahead feature that disables the moving of the pointer:

 $number_of_full_pattern = preg_match_all('/(cg(?=c))/', "cgcgcgcgcgcgcg", $chunks);

In this case the variable $number_of_full_pattern has the value 6.
Firstly a string "cg" will be matched and the pointer will be moved to the end of this string. Then the regular expression looks ahead whether a 'c' can be matched. Despite of the occurence of the character 'c' the pointer is not moved.