What is the difference between preg_match_all and substr_count functions in PHP when counting occurrences of a string?

When counting occurrences of a string in PHP, `preg_match_all` is used for more complex pattern matching using regular expressions, while `substr_count` is used for simple string matching. `preg_match_all` allows you to specify a pattern to match against, making it more flexible but also potentially slower than `substr_count` which simply counts occurrences of a substring.

// Using preg_match_all to count occurrences of a string with a specific pattern
$string = "The quick brown fox jumps over the lazy dog";
$pattern = "/[aeiou]/i"; // Match any vowel
preg_match_all($pattern, $string, $matches);
$count = count($matches[0]);
echo "Number of vowels: " . $count;

// Using substr_count to count occurrences of a string
$string = "The quick brown fox jumps over the lazy dog";
$substring = "o";
$count = substr_count($string, $substring);
echo "Number of 'o's: " . $count;