我有这样一句话:
$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值,任何想法我在这里做错了什么?
答案 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]);
}