我在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。