Preg Match查找字符串中精确单词的计数

时间:2016-04-28 07:37:19

标签: php regex

我想找到字符串中的单词数。我使用下面的正则表达式来做同样的事情。

$count_keys = preg_match_all('/\bs.c.\b/', $str);

这里$ str是我们需要找到单词sc的出现次数的字符串,但是我得到错误的结果说如果他们是一个单词#ssc或#sssc他们是也算数了。请指导我在哪里犯错误,或者请给出正确的正则表达式代码。

3 个答案:

答案 0 :(得分:3)

试试这个:

$str = 'this is a s.c good to check s.c ';

echo $count_keys = preg_match_all('/\bs\.c/', $str);

<强>输出:

  

2

答案 1 :(得分:1)

我相信问题是你的正则表达。如果您正在寻找“s.c”的出现,试试这个:

$count_keys = preg_match_all('/\bs\.c\b/', $str);

你在“。”之前错过了一个“\”。这导致了一个问题,因为“。”匹配正则表达式中的任何字符(换行符除外)。

但是,如果您正在寻找“s.c.”的出现次数。然后试试这个:

$count_keys = preg_match_all('/\bs\.c\.\b/', $str);

答案 2 :(得分:0)

使用substr_count()而不是preg_match_all

this is the tutorials

<?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 substrings
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
?>