2

「Helloworld!%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

$ matchs配列(3番目のパラメーター)でpreg_match_allを使用してから、オカレンスの長さまたは配列を計算します。

$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

私の頭の中で部分文字列を定義する以外の目的で%記号を使用することが決してない場合、最も簡単な方法はこれを行うことです。

$pieces = explode('%',$string);
$num_substrings = count($pieces) + 1;
于 2012-07-20T13:27:06.690 に答える
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 に答える