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);