简体   繁体   English

查找字符串中给定值出现的次数?

[英]Find number of occurrence of given value within string?

Consider a string as below . 考虑如下字符串。

$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$";

I have to find out how many numbers are there within this string. 我必须找出此字符串中有多少个数字。 But the number is equal to 1000 and above 1000 which proceed and followed by $ symbol . 但是数字等于1000,且等于1000,且大于或等于1000,后跟$符号。

Example : $1000 (or) $ 1000 (or) 1000$ (or) 1000 $ and above 1000 only . 示例:仅$ 1000(或)$ 1000(或)1000 $(或)1000 $及以上1000。

Using preg_match_all() and a foreach loop: 使用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

I've used \\d{4,} to match 4 digit numbers which are 1000 or higher, but say for example there is a number like 0500 , this will also be matched. 我已经使用\\d{4,}来匹配1000或更高的4位数字,但是例如说有一个像0500这样的数字也将被匹配。 So I used a foreach loop to filter the numbers. 所以我用了一个foreach循环来过滤数字。

<?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
)

Try this : 尝试这个 :

$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);

Output : 输出:

Array
(
    [0] => 1000
    [1] => 2000
    [2] => 5000
    [3] => 1020
    [4] => 2000
    [5] => 3000
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM