php - 解析文件中的内容

标签 php regex preg-match preg-match-all

我正在尝试解析包含以下内容的文件并将其显示在表格中。问题是我只能得到第一个租约节。我不确定如何获得其余的?有什么想法吗?

输入:

# The format of this file is documented in the dhcpd.leases manual page.
# This lease file was written by isc-dhcp-V3.0.3b1

lease 192.168.98.25 {
  starts 5 2012/10/05 21:18:41;
  ends 5 2012/10/05 22:48:15;
  tstp 5 2012/10/05 22:18:41;
  binding state free;
  hardware ethernet 78:d6:f0:c1:7f:b5;
  uid "\001x\326\360\301\177\265";
}
lease 192.168.10.1 {
  starts 5 2012/10/04 12:23:23;
  ends 5 2012/10/05 22:48:15;
  binding state active;
  next binding state free;
  hardware ethernet 56:a3:f0:d1:75:b5;
  uid "\001x\326\360\301\177\265";
}
....
....

输出:

 HW Address  |start time  | end time | IP 
 78:d6:f0:c1:7f:b5 | 2012/10/05 21:18:41 | 2012/10/05 22:48:15 | 192.168.98.25
 56:a3:f0:d1:75:b5 | 2012/10/04 12:23:23 | 2012/10/05 22:48:15 | 192.168.10.1

这是我到目前为止尝试过的:

$readfile = file('/etc/dhcp/dhcpd.leases',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$arstring = implode(" ",$readfile);

$regex=array();
preg_match_all("(lease\s*([0-9.]+)\s*{\s*starts\s*.?\s*([0-9/\s:]*).?\s*ends\s*.?\s*([0-9/\s:]*).*ethernet\s*([\w:]*))", $arstring, $regex,PREG_SET_ORDER);

这给了我:

[0] => Array
    (
        [0] => lease 192.168.98.25 {   starts 5 2012/10/05 21:18:41;   ends 5 2012/10/05 22:18:41;   tstp 5 2012/10/05 22:18:41;   binding state free;   hardware ethernet 78:d6:f0:c1:7f:b5;   uid "\001x\326\360\301\177\265"; } lease 192.168.98.25 {   starts 5 2012/10/05 22:54:15;   ends 5 2012/10/05 23:54:15;   binding state active;   next binding state free;   hardware ethernet 78:d6:f0:c1:7f:b5;   uid "\001x\326\360\301\177\265"; } lease 192.168.98.25 {   starts 5 2012/10/05 22:54:16;   ends 5 2012/10/05 23:54:16;   binding state active;   next binding state free;   hardware ethernet 78:d6:f0:c1:7f:b5
        [1] => 192.168.98.25
        [2] => 2012/10/05 21:18:41
        [3] => 2012/10/05 22:18:41
        [4] => 78:d6:f0:c1:7f:b5
    )

最佳答案

我不太了解PHP所以我不能给你确切的代码,但是如果你把它变成一个替换然后在循环中执行它,用一个空白替换匹配的部分直到没有任何东西可以剩下匹配,这可能会成功。

关于php - 解析文件中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286002/

相关文章:

regex - ^ 和 $ 用正则表达式的基本运算表示

php - 在 PHP 中使用 Gruber 的正则表达式进行网址匹配

php - Preg 用于检查它发生了多少次

php - 在字符串(大约 500 个字符)中搜索关键字(来自矩阵)

php - 使用组合值更新重复键?

javascript - 如何在一页中使用具有相同 id 的重复元素的 JavaScript?

java - 使用正则表达式匹配特定运算符

php - 如何检查 WordPress 中的缩略图?

c++ - 什么是可移植的轻量级 C/C++ 正则表达式库?

symfony - 如何在 Twig 中进行 preg_replace