2012-02-13 72 views
0

我在PHP中使用以下正則表達式與preg_match函數來匹配Linux中df命令的輸出。請注意,我使用了一個define宏來簡化正則表達式的可讀性。df輸出上的正則表達式不起作用

define("MATCH_DF", 
    "/^(?P<filesystem>[0-9a-z\/]+)\s+" . 
    "(?P<blocks>[0-9]+)\s+" . 
    "(?P<used>[0-9]+)\s+" . 
    "(?P<avail>[0-9]+)\s+" . 
    "(?P<percent>[0-9]+%)\s+" . 
    "(?P<mount>[0-9a-zA-Z\/]+)\s+$/"); 

對於那些不知道是誰,在df命令行的輸出看起來像這樣...

Filesystem  1K-blocks  Used Available Use% Mounted on 
/dev/sda2  236520176 2863468 221642116 2%/

誰能告訴我什麼,我在這裏失蹤?爲什麼這不起作用?我已經將問題縮小到了我的正則表達式中。

+1

'preg_match()'給你什麼輸出? – 2012-02-13 03:47:05

回答

4

您正在尋找字符串末尾的一些空格,但沒有任何空格。您可以將+量詞替換爲*以使其成爲可選項,或將其全部刪除。

試試這個正則表達式...

define("MATCH_DF", 
    "/^(?P<filesystem>[\da-z\/]+)\s+" . 
    "(?P<blocks>\d+)\s+" . 
    "(?P<used>\d+)\s+" . 
    "(?P<avail>\d+)\s+" . 
    "(?P<percent>\d+%)\s+" . 
    "(?P<mount>[\da-zA-Z\/]+)$/"); 

CodePad

我還換了您的[0-9]\d

如果你要放棄數字匹配並只保留一個名爲捕獲組...

$matches = array_diff_key($matches, array_values($matches)); 

CodePad

+0

+1鷹眼 – 2012-02-13 03:51:42

+0

@Michael我希望比[電影](http://www.imdb.com/title/tt1059786/):)更好。 – alex 2012-02-13 03:55:31

+0

謝謝!我連續觀察了12分鐘,從未注意到我在最後留下了空間匹配。 – 2012-02-13 04:03:13