1

以下のような文字列を考えてみましょう。

$string="Lorem ipsum $ 1000 ,ipsum $2000 sopr $250 gerb $ 150 dfkuer fsdf erwer 1020 $ gsdfasdtwe qw $ 5000 efk kdfgksgdf 2000 $ sdhfgsd fsdf 620 $ sdfjg jsdf3000$";

この文字列内にいくつの数字があるかを調べなければなりません。しかし、その数は 1000 以上で、その後に $symbol が続きます。

例: $1000 (または) $1000 (または) 1000$ (または) 1000 $および 1000 以上のみ。

4

3 に答える 3

1

preg_match_all() と foreach ループの使用:

$string="Lorem ipsum $ 1000 ,ipsum $2000 sopr $250 gerb $ 150 dfkuer fsdf erwer 1020 $ gsdfasdtwe qw $ 50000 efk kdfgksgdf 2000 $ sdhfgsd fsdf 620 $ sdfjg jsdf3000$";

preg_match_all('/(\$\s?)(?P<before>\d{4,})|(?P<after>\d{4,})(\s?\$)/', $string, $m);

$tmp = array_filter($m["before"]) + array_filter($m["after"]);
$number = array();
foreach($tmp as $n){
    if($n >= 1000){
        if(isset($number[$n])){
            $number[$n]++;
        }else{
            $number[$n] = 1;
        }
    }
}

print_r($number);
// Key => number, value => n occurences

以前\d{4,}は 1000 以上の 4 桁の数字を照合していましたが、たとえば のような数字があると0500、これも照合されます。そこで、foreach ループを使用して数値をフィルター処理しました。

于 2013-03-28T08:05:43.823 に答える
0
<?php
$string="Lorem ipsum $ 1000 ,ipsum $2000 sopr $250 gerb $ 150 dfkuer fsdf erwer 1020 $ gsdfasdtwe qw $ 5000 efk kdfgksgdf 2000 $ sdhfgsd fsdf 620 $ sdfjg jsdf3000$";
$pattern = "#([$][\s]*)?([1-9]\d{3})([\s]*[$])?#";
//(?<=$|$\s)
//(?=$|\s$)
preg_match_all($pattern, $string, $out);
print_r($out[2]);

Array
(
    [0] => 1000
    [1] => 2000
    [2] => 1020
    [3] => 5000
    [4] => 2000
    [5] => 3000
)
于 2013-03-28T08:15:28.343 に答える
0

これを試して :

$string  ="Lorem ipsum $ 1000 ,ipsum $2000 sopr $250 gerb $ 150 dfkuer fsdf erwer 1020 $ gsdfasdtwe qw $ 5000 efk kdfgksgdf 2000 $ sdhfgsd fsdf 620 $ sdfjg jsdf3000$";

preg_match_all('/\$\s?(?P<pr>\d{4,})|(?P<fl>\d{4,})\s?\$/',$string,$match);
$res     = array_merge(array_filter($match['pr']),array_filter($match['fl']));

echo "<pre>";
print_r($res);

出力:

Array
(
    [0] => 1000
    [1] => 2000
    [2] => 5000
    [3] => 1020
    [4] => 2000
    [5] => 3000
)
于 2013-03-28T08:29:48.333 に答える