php正则表达式提取模式但只有里面的数字

时间:2016-03-19 18:55:08

标签: php regex

我通过网络服务获取数据,我需要解析以找到一些值(阳光持续时间),这在PHP中。我的想法是用正则表达式来做。

我已经可以找到所需的模式sunshine: 7.5 h,但我只需要找到匹配项中的7.2(实际上是一个数字)。在PHP中最直接的方法是什么?

我可以在一个pre_match中完成,还是需要2 x pre_match(第一个匹配的第二个)?

我的代码:

//test data
$testInputs = array (
    0 => "blabla sunshine: 7 h blabla",
    1 => "blabla sunshine: 7.5 h blabla",
    2 => "blabla sunshine: 0.5 h blabla"
    );
//pattern
$pattern = '/sunshine: [\d]*.?[\d]*/';
//test
foreach($testInputs as $testInput)
 {
 preg_match($pattern, $testInput, $matches, PREG_OFFSET_CAPTURE);
 print($testInput);
 print_r($matches);
 print("<br>");
 }

输出

sunshine: 7 h Array ( [0] => Array ( [0] => sunshine: 7 [1] => 1 ) ) 
sunshine: 7.5 h Array ( [0] => Array ( [0] => sunshine: 7.5 [1] => 1 ) ) 
sunshine: 0.5 h Array ( [0] => Array ( [0] => sunshine: 0.5 [1] => 1 ) )

1 个答案:

答案 0 :(得分:1)

只需添加括号以捕获所需的数字:

'/sunshine: ([\d]*.?[\d]*)/'

执行preg_match而不PREG_OFFSET_CAPTURE

preg_match($pattern, $testInput, $matches);

matches[1]数组中,您将找到所需的结果。