Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算字符串中特定字符的数量_Php_String - Fatal编程技术网

Php 计算字符串中特定字符的数量

Php 计算字符串中特定字符的数量,php,string,Php,String,很抱歉,由于我的问题,我发现了一个新问题: 我一直在努力,如何找到字符串中特定字符的数目?这个案子是这样的 function get_num_chars($char) { $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1' } 如果我通过get\u num\u chars(M)将返回2 如果我通过get\u num\u chars(M-1),将返回1 我尝试了count\u chars(),s

很抱歉,由于我的问题,我发现了一个新问题:

我一直在努力,如何找到字符串中特定字符的数目?这个案子是这样的

function get_num_chars($char) {
    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1'
}
如果我通过
get\u num\u chars(M)将返回2
如果我通过
get\u num\u chars(M-1),将返回1


我尝试了
count\u chars()
substr\u count()
,但它不起作用

使用substr_count()是可能的

我认为你没有正确地传递它的价值,试着这样做

$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';

echo substr_count($string, 'K-1');//echo's 1

echo substr_count($string, 'K');// echo's 2

尝试一下,这可能不可行,但可以解决您的问题

function get_num_chars($char) {

    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';
    echo substr_count($string, $char);
}
get_num_chars('M,');
get_num_chars('M-1');
get_num_chars('k,');

计数K后不跟破折号
,如下所示:

$k_count = preg_match_all('/*K(?!-)/*', $string, $out);
试试这个

 $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';

 $wordCounts = array_count_values(str_word_count($string,1));

 echo $mCount = (isset($wordCounts['M-'])) ? $wordCounts['M'] : 0;

但这里有一件事你可以通过'M-'或'M'而不是'M-1',这是一些你想要的解决办法。因为str\u word\u计数与所使用的精确字数匹配。

使用正则表达式的可能解决方案:

function get_num_chars($char) {
    $string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';
    return preg_match_all('/'.$char.'(?=,|$)/', $string, $m);
}

echo get_num_chars('M');    // 2
echo get_num_chars('M-1');  // 1
echo get_num_chars('M-2');  // 1
echo get_num_chars('K');    // 1
echo get_num_chars('K-1');  // 1
看看这个

$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';
$arrString = explode($string,'M');
echo $stringCount = count($arrString);


他想让第二个回显
1
,而不是
2
。是的。巴尔马是对的。搜索“K”时,排除“K-1”。因此,substr_count($string,'K')应该是1个可能的解决方案:
$string=str_replace('K-1','$string)
K-1
被计数之后。正如其他人所说,在较大的子串中存在针串的情况下,此答案将产生不正确的结果。问题是,当某个内容包含
K-1
时,它也包含
K
。函数如何知道不计算这些值?您需要更仔细地定义问题。@Barmar:OP没有指定
K-1
不应匹配?@Aquillo他指定了。。。他希望if(M)返回2,if(M-1)返回1。。。。“巴尔马”是对的。哦,对不起。在这种情况下,您最好计算正则表达式的匹配项,比如
计算字符的匹配项,不后跟破折号
计算字符的匹配项,后跟逗号或行尾
I,尽管解决方案使用正则表达式来区分出现的“K”(K后面不跟“-1”)和K-1(K后面跟-1)。如何在正则表达式中编写它呢?那么如果最后一个字符集以
K
结尾呢?结尾没有逗号。如前所述,搜索K时的字符串也将匹配K-1。因此编码员需要彻底检查他的输入。是的,但是说:
$string='120201M,121212M-1,211212m,232323M-2,32323K,323232K-1,2323K'。最后一个条目不会与
“K”匹配,
这很容易解决。添加填充
$string.=','
,然后使用
rtrim
将其删除(如果其他地方需要
$string
)。如本页其他地方所述,在针串位于较大子串内的情况下,此答案将产生不正确的结果。查找“lookaround”在regular-expression.info上,如果字符串的大小非常大,则此操作将失败。@Munt请描述“非常高”。@mickmackusa可能是非常大的字符串?因为我不再使用PHP,所以我忘记了我在这里的意思。如果你只是想返回匹配计数,那么声明
$m
没有任何好处。我认为你没有测试正则表达式。
str\u word\u count()
会破坏数据——因此
m-1
是不可搜索的。证据:“检查这个,”…好吧,这肯定是完全错误的。证据:你在这里哪里出错了?1.您没有测试代码2。你没有解释你的代码。因此,我投票删除了这个答案,因为这对研究人员来说纯粹是浪费时间。
$string = '120201M, 121212M-1, 21121212M, 232323M-2, 32323K, 323232K-1';
$arrString = explode($string,'M');
echo $stringCount = count($arrString);