计算所有单词,包括php字符串中的数字

时间:2014-10-24 14:03:14

标签: php

要计算php字符串中的单词通常我们可以使用str_word_count但我认为并不总是一个好的解决方案

很好的例子:

$var ="Hello world!";
echo str_word_count($str);
print_r(str_word_count($str, 1));

- >输出

   2
   Array ( [0] => Hello [1] => world ) 

坏例子:

$var ="The example number 2 is a bad example it will not 
count numbers  and punctuations !!";

- >输出:

  14
  Array ( [0] => The [1] => example [2] => number [3] => is [4] => a
  [5] => bad [6] => example [7] => it [8] => will [9] => not 
  [10] => count [11] => numbers [12] => and [13] => punctuations ) 

是否有一个很好的预定义函数来正确执行此操作或者是否必须使用preg_match()?

9 个答案:

答案 0 :(得分:6)

以下使用count()explode()将回显:

The number 1 in this line will counted and it contains the following count 8

PHP:

<?php

$text = "The number 1 in this line will counted";

$count = count(explode(" ", $text));

echo "$text and it contains the following count $count";

?>

修改

旁注:
可以修改正则表达式以接受标准集中未包含的其他字符。

<?php

$text = "The numbers   1  3 spaces and punctuations will not be counted !! . . ";

$text = trim(preg_replace('/[^A-Za-z0-9\-]/', ' ', $text));

$text = preg_replace('/\s+/', ' ', $text);


// used for the function to echo the line of text
$string = $text;

    function clean($string) {

       return preg_replace('/[^A-Za-z0-9\-]/', ' ', $string);

    }

echo clean($string);

echo "<br>";

echo "There are ";
echo $count = count(explode(" ", $text));
echo " words in this line, this includes the number(s).";

echo "<br>";

echo "It will not count punctuations.";

?>

答案 1 :(得分:4)

您始终可以按空格分割字符串并计算结果:

$res = preg_split('/\s+/', $input);
$count = count($res);

使用你的字符串

"The example number 2 is a bad example it will not 
count numbers  and punctuations !!"

此代码将生成16

explode(' ', $string)上使用它的优点是它可以用于多行字符串以及制表符,而不仅仅是空格。缺点是速度较慢。

答案 2 :(得分:0)

使用count(explode(' ', $var));

答案 3 :(得分:0)

你可以试试这个,

<?php
function word_count($sentence)
{
$break = explode(" ",$sentence);
$count = count($break);
return $count;
}
$count =  "Count all words of this sentence";
echo word_count($count); 
//Output 6
?>

以下是Word Count In PHP

的更多信息

答案 4 :(得分:0)

您也可以使用以下代码为我工作。

    function get_num_of_words($string) {
        $string = preg_replace('/\s+/', ' ', trim($string));
        $words = explode(" ", $string);
        return count($words);
    }

    $string="php string word count in simple way";
    echo $count=get_num_of_words($string);

结果将是7

答案 5 :(得分:0)

我知道这个问题已经过时了,我仍在分享我为此采用的修复方法。

$str ="Hello world !";
// you can include allowed special characters  as third param.
print_r(str_word_count($str, 1, '!'));

代码输出

Array ( [0] => Hello [1] => world [2] => ! )

如果你想包含更多可以指定为第三个参数的单词。

print_r(str_word_count($str, 1, '0..9.~!@#$%^&*()-_=+{}[]\|;:?/<>.,'));

从0..9开始。将包括所有麻木,并单独插入其他特殊字符。

答案 6 :(得分:0)

只需改善您的解决方案

function stringWordNumberCount($text){
    if (!$text) {
        return 0;
    }

    //Clean the text to remove special character
    $text = trim(preg_replace('/[^A-Za-z0-9\-]/', ' ', $text));

    //Remove continus space on text
    $text = trim( preg_replace('/\s+/', ' ',$text));

    //count space
    return count(explode(' ', $text));

}

答案 7 :(得分:0)

计数字符串中单词的最广泛使用的方法是通过使用任何类型的空格进行拆分:

count(preg_split('~\s+~u', trim($text)))

在这里,'~\s+~u'用1个或多个Unicode空格字符分割整个文本。

缺点是!!被认为是一个单词。

如果要计算字母和数字单词(即仅由字母或数字组成的文本字符串),则应考虑使用preg_match_all

if (preg_match_all('~[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?|\d+|(?>\p{L}\p{M}*+)+~u', $text, $matches)) {
    return count($matches[0]);
}

请参见regex demoPHP demo

$re = '~[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?|\d+|(?>\p{L}\p{M}*+)+~u';
$text = "The example number 2 is a bad example it will not \ncount numbers  and punctuations !! X is 2.5674.";
if (preg_match_all($re, $text, $matches)) {
    echo count($matches[0]);
} // 18 in this string

[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?的正则表达式是众所周知的integer or float number regex,并且(?>\p{L}\p{M}*+)+匹配任意1个或多个字母(\p{L}),每个字母都可以跟任意数量变音符号(\p{M}*+)。

正则表达式详细信息

  • [-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?-可选的-+,0+ ASCII数字,可选的.,1+ ASCII数字,e的可选序列或E,可选的-+,然后是1+ ASCII数字
  • |-或
  • \d+-任意1个或多个Unicode数字
  • |-或
  • (?>\p{L}\p{M}*+)+-出现1个或更多的Unicode字母,后跟0+变音符号。

如果您只想计算仅由数字和字母组成的文本块(带有变音符号)以任意顺序混合 ,您也可以使用

'~[\p{N}\p{L}\p{M}]+~u'

请参见another regex demo\p{M}匹配变音符号,\p{N}匹配数字,\p{L}匹配字母。

答案 8 :(得分:-1)

ANS:

function limit_text($text, $limit) {
    if(str_word_count($text, 0) > $limit) {
        $words = str_word_count($text, 2);
        $pos = array_keys($words);
        $text = substr($text, 0, $pos[$limit]) . '...';
    }
    return $text;
}