你如何解析PHP中的文本值

时间:2013-06-27 16:33:31

标签: php

我有这样一句话:

   $line1= "System configuration: lcpu=96 mem=393216MB ent=16.00"

我需要从这个字符串中解析出lcpu,mem和ent值。我尝试过这样的事情:

  $lcpu=preg_match('/(?P<lcpu>\w+)= (?P<digit>\d+)/', $line1, $matches);

似乎没有从字符串$ line1获取lcpu值,任何想法我在这里做错了什么?

5 个答案:

答案 0 :(得分:2)

另一种解析字符串的方法:

$line1= "System configuration: lcpu=96 mem=393216MB ent=16.00";

list($lcpu, $mem, $ent) = sscanf($line1, "System configuration: lcpu=%d mem=%dMB ent=%f");

答案 1 :(得分:2)

你几乎有一个查询字符串,所以也许

$string = explode(": ", $line1);
$string = str_replace(" ", "&", $string[1]);
parse_str($string, $values);

echo $values['lcpu'];

答案 2 :(得分:0)

解析字符串的方法有很多种。爆炸通常比使用正则表达式更快,因此这种方式可能比依赖正则表达式的方法更高效。

list( , , $lcpu_pair )= explode( " ", $line1 );

list( , $lcpu_value ) = explode( "=", $lcpu_pair );

$lcpu_value将包含'96'。

答案 3 :(得分:0)

为什么不使用简单的函数来获取两个字符串之间的字符串。如果lcpu值总是以“lcpu =”作为前缀并以“”(空格)结尾,那么你可以使用:

    function getBetween($str, $start, $end)
    {
        $r = explode($start, $str);
        if (isset($r[1])) 
        {
            $r = explode($end, $r[1]);
            return $r[0];
        }
        return false;
    }

然后说:

   if (getBetween($line1, 'lcpu=', ' ')) { ... }

如果找不到任何内容,它将返回false。

答案 4 :(得分:0)

就个人而言,我会用语法解析(而不是搜索特定的键):

<?php

$input = "System configuration: lcpu=96 mem=393216MB ent=16.00";

// Strip out "System configuration: "
$values = preg_replace('~^.*?:\s*$~', '', $input);

// Split on whitespace separator
$values = preg_split('~\s+~', $values);

// Convert to associative array
foreach ($values as $i => $item)
{
    // Explode on assignment (=)
    list($k, $v) = explode('=', $item);
    $values[$k] = $v;
    unset($values[$i]);
}