我有一个字符串和子字符串格式,例如“Hello world!%1,abcdef%2,gfgf%14”,即子字符串格式为'%'+ digit(0 ... infinity),我需要在任何字符串中计算这个子字符串。我知道substring_count函数,但是对于这个函数我需要知道一个已定义的行。那么,请告诉我,如何使用正则表达式或其他任何东西来计算?
编辑:
这些代码有效:
$r = "Hello world!%1, abcdef%2, gfgf%14";
$matches = array();
preg_match_all('/\%\d+/', $r, $matches);
echo isset($matches[0]) ? count($matches[0]) : 0;
但如果我在%1之前或之后有空格,则代码不起作用。请修复此表达式。提前致谢。
答案 0 :(得分:2)
<?php
$str = "Hello world!%1, abcdef%2, gfgf%14";
$match_count = preg_match_all("/%\d+/", $str);
echo $match_count;
顺便说一下,$matches
将包含所有匹配的子字符串。
答案 1 :(得分:0)
如果你永远不会在我脑海中使用%符号来定义子字符串,那么最简单的方法就是:
$pieces = explode('%',$string);
$num_substrings = count($pieces) + 1;
答案 2 :(得分:0)
preg_match_all
返回匹配数。
$r = "Hello world!%1, abcdef%2, gfgf%14";
echo preg_match_all('/\%\d+/', $r, $matches);
// in PHP >= 5.4 you can leave out $matches
结果:
3
答案 3 :(得分:-1)
将preg_match_all与$ matches数组(第三个参数)一起使用,然后计算出现的长度或数组:
$r = "Hello world!%1, abcdef%2, gfgf%14";
$matches = array();
preg_match_all('/\%\d+/', $r, $matches);
echo isset($matches[0]) ? count($matches[0]) : 0;