文本值我有這樣一行:你如何分析出在PHP
$line1= "System configuration: lcpu=96 mem=393216MB ent=16.00"
我需要從這個字符串解析出LCPU,MEM耳鼻喉科值。我已經試過這樣的事情:
$lcpu=preg_match('/(?P<lcpu>\w+)= (?P<digit>\d+)/', $line1, $matches);
似乎並沒有從字符串$一號線得到LCPU值,任何想法,我做錯了什麼?
文本值我有這樣一行:你如何分析出在PHP
$line1= "System configuration: lcpu=96 mem=393216MB ent=16.00"
我需要從這個字符串解析出LCPU,MEM耳鼻喉科值。我已經試過這樣的事情:
$lcpu=preg_match('/(?P<lcpu>\w+)= (?P<digit>\d+)/', $line1, $matches);
似乎並沒有從字符串$一號線得到LCPU值,任何想法,我做錯了什麼?
你記起來了查詢字符串那麼,也許
$string = explode(": ", $line1);
$string = str_replace(" ", "&", $string[1]);
parse_str($string, $values);
echo $values['lcpu'];
謝謝你。如果lcpu有一個文本而不是數字,我將如何只包含數字(數字)? – user1471980
我知道了preg_replace,謝謝 – user1471980
解析字符串有很多種方法。爆炸通常比使用正則表達式快,所以這種方式可能比依賴正則表達式的方法更有效。
list(, , $lcpu_pair)= explode(" ", $line1);
list(, $lcpu_value) = explode("=", $lcpu_pair);
$lcpu_value
將包含'96'。
爲什麼不使用一個簡單的函數來獲取兩個字符串之間的字符串。如果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。
就個人而言,我會通過語法分析,而不是(而不是搜索特定的鍵):
<?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]);
}
另一種方式來剝字符串:
$line1= "System configuration: lcpu=96 mem=393216MB ent=16.00";
list($lcpu, $mem, $ent) = sscanf($line1, "System configuration: lcpu=%d mem=%dMB ent=%f");
這裏的缺點是鍵/值對的順序非常重要:/。否則,這感覺是最優雅的答案。 – landons
*它得到了什麼值?你怎麼知道它不工作? –
另外,在正則表達式中你的'='後面有一個空格。在你的字符串中,沒有空間。 –
@火箭Hazmat,糾正後,我得到這個值,lcpu = 96。我需要這個號碼,只有96。 – user1471980