2

我有一个字符串和子字符串的格式,例如“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 之前或之后有一个空格,则代码不起作用。请修复这个表达式。提前致谢。

4

4 回答 4

2
<?php

$str = "Hello world!%1, abcdef%2, gfgf%14";

$match_count = preg_match_all("/%\d+/", $str);

echo $match_count;

顺便说一句,$matches将保存所有匹配的子字符串。

于 2012-07-20T13:28:03.307 回答
0

如果你永远不会使用 % 符号来定义我认为的子字符串以外的任何东西,那么最简单的方法就是这样做:

$pieces = explode('%',$string);
$num_substrings = count($pieces) + 1;
于 2012-07-20T13:27:06.690 回答
0

将 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;
于 2012-07-20T13:30:06.187 回答
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
于 2012-07-20T14:57:56.493 回答