字符串

时间:2016-07-02 11:53:54

标签: php regex

我正在尝试计算字符串中字符的出现次数。 例如:

$string = "ab abc acd ab abd";
$chars = "ab";

$chars$string完全出现了多少次,正确答案是2次,但substr_count()则返回3次!!!

有没有返回正确答案的PHP函数或Regex?

3 个答案:

答案 0 :(得分:5)

使用正则表达式,您可以执行以下操作:

$count = preg_match_all('/\bab\b/', $string);

它会计算单词" ab "的出现次数。正则表达式中的\b表示非单词字符和单词字符之间的位置。 A" "字符是任何字母或数字或下划线字符。

答案 1 :(得分:1)

对于你已经在评论中说过的内容,你并没有试图找到一个确切的词,因为一个词有特定的界限。所以你要做的就是这样:

/(?:\A|[^H])HH(?:[^H]|\z)/g
preg_match_all('/(\A|[^H])HH([^H]|\z)/', $string, $matches);

或问题的例子:

/(?:\A|[^a])ab(?:[^b]|\z)/g
preg_match_all('/(?:\A|[^a])ab(?:[^b]|\z)/', $string, $matches);

<强>解释

 (?: \A | [^a] )    # very beginning of the input string OR a character except `a`
 ab                 # match `ab`
 (?: [^b] | \z )    # end of the input string OR a character except `b`

<强> Live demo

以上是对应该做什么的简单理解,但使用为此特定目的而制作的解决方案更好,名为 lookarounds

/(?<!a)ab(?!b)/g
preg_match_all('/(?<!a)ab(?!b)/', $string, $matches);

答案 2 :(得分:0)

有几种方法。如上所述的正则表达式,或者使用简单的PHP代替:

$string = 'ab abc acd ab abd';
$chars = 'ab';

$strings = explode(" ", $string);
echo array_count_values($strings)[$chars];
// Outputs 2

// IF you don't have php 5.6:
$values = array_count_values($strings);
echo $values[$chars];
// Outputs 2