Reputation: 57
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 .
Example : $1000 (or) $ 1000 (or) 1000$ (or) 1000 $ and above 1000 only .
Upvotes: 1
Views: 143
Reputation: 14921
Using preg_match_all() and a foreach loop:
$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. So I used a foreach loop to filter the numbers.
Upvotes: 1
Reputation: 32740
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
)
Upvotes: 0
Reputation:
<?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
)
Upvotes: 0