如何使用正则表达式获取字符串中的子字符串数?

时间:2012-07-20 13:22:14

标签: php

我有一个字符串和子字符串格式,例如“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 个答案:

答案 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;