df输出上的Regex不工作


Regex on df output not working

我在PHP中使用以下带有preg_match函数的正则表达式来匹配Linux中df命令的输出。请注意,我使用了define宏来简化正则表达式的可读性。

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% /

有人能告诉我我在这里缺了什么吗?为什么不起作用?我已经把问题缩小到正则表达式中的某个问题。

您正在字符串末尾寻找一些空白,但没有。您可以将+量词替换为*,使其成为可选的,或者将其全部删除。

试试这个正则表达式。。。

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。