坚持使用 PHP 和正则表达式为 MYSQL 准备 DHCP 输出
Stuck using PHP and Regex to prepare a DHCP output for MYSQL
您好,我一直在尝试不使用 preg_replace 和 preg_match 替换某些元素,基本上我正在转换 dhcp 租用输出,以便我可以将元素插入数据库。
我可以在 notepad++ 中做我需要的事情,但我想使用 php 自动化它这是我在 notepad++ 中的正则表达式步骤:
步骤 1)代码
\s?-(\w)-\s?
~
第 2 步)租赁
-\s?(\d\d/\d\d/\d\d\d\d\s\d\d:\d\d:\d\d|NEVER EXPIRES|INACTIVE)\s?
~~
步骤 3) 识别 IP
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+?-\s?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
~
步骤 4)ID mac
\s?-\s?(([0-9A-Fa-f]{2}[:-]){3,6}([0-9A-Fa-f]{2}))
~
所需的输出将是每个元素由波浪符号分隔 ~ 准备展开成一个数组,我可以在插入语句中使用:
192.25.200.4 ~ 255.255.255.192~ 64-9e-f3-b3-81-d3 ~01/08/2018 17:07:46 ~D~ BH1-WAP-01.local
这里是一些测试数据:
Changed the current scope context to 192.25.200.0 scope.
Type : N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
============================================================================================
IP Address - Subnet Mask - Unique ID - Lease Expires -Type -Name
============================================================================================
192.25.200.4 - 255.255.255.192- 64-9e-f3-b3-81-d3 -01/08/2018 17:07:46 -D- BH1-WAP-01.local
192.25.200.5 - 255.255.255.192- 50-57-a8-30-11-f6 -01/08/2018 16:24:59 -D- BH1-WAP-03.local
192.25.200.6 - 255.255.255.192- f0-f7-55-df-c4-ff -01/08/2018 16:45:04 -D- BH1-WAP-02.local
192.25.200.7 - 255.255.255.192- 00-23-24-bb-ce-83 -04/08/2018 10:55:00 -D- CESTA1703043.LOCAL
No of Clients(version 4): 4 in the Scope : 192.25.200.0.
Command completed successfully.
Changed the current scope context to 192.25.200.64 scope.
Type : N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
============================================================================================
IP Address - Subnet Mask - Unique ID - Lease Expires -Type -Name
============================================================================================
192.25.200.68 - 255.255.255.192- 28-94-0f-05-ac-6c -01/08/2018 03:14:46 -D- WAP-C12-01-1047.local
No of Clients(version 4): 1 in the Scope : 192.25.200.64.
Command completed successfully.
Changed the current scope context to 192.28.211.0 scope.
192.28.211.27 - 255.255.255.0 -00-0a-13-00-00-00-00- NEVER EXPIRES -U- CFCameraNearlockers
Changed the current scope context to 192.28.194.0 scope.
192.28.194.254 - 255.255.255.0 -00-48-32-95-85 - INACTIVE -N- bms
您可以使用
'~^(\d{1,3}(?:\.\d{1,3}){3})\s*-\s*((?1))\s*-\s*((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})\s*-\s*(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)\s*-\s*(\w)\s*-\s*(.*)$~m'
并替换为
' ~ ~ ~ ~ ~ '
详情
^
- 行首
(\d{1,3}(?:\.\d{1,3}){3})
- 第 1 组:1 到 3 位数字,然后出现 3 次 .
,后跟 1 到 3 位数字
\s*-\s*
- 包含 0+ 个空格的 -
((?1))
- 第 2 组:捕获第 1 组模式
\s*-\s*
- 包含 0+ 个空格的 -
((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})
- 第 3 组:3 到 6 次出现 2 个十六进制字符,后跟 :
或 -
,然后是 2 个十六进制字符
\s*-\s*
- 包含 0+ 个空格的 -
(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)
- 第 4 组:2 位数字,/
,2 位数字,/
,4 位数字,一个空格,2 位数字,然后出现 2 次 :
和 2 位数字
\s*-\s*
- 包含 0+ 个空格的 -
(\w)
- 第 5 组:一个单词 char
\s*-\s*
- 包含 0+ 个空格的 -
(.*)
- 第 6 组:行的其余部分
$
- 一行结束。
如果您只需要抓取这些行并重新格式化,请使用
$text = <YOUR TEXT>;
$reg = '~^(\d{1,3}(?:\.\d{1,3}){3})\s*-\s*((?1))\s*-\s*((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})\s*-\s*(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)\s*-\s*(\w)\s*-\s*(.*)$~m';
$arr = [];
if (preg_match_all($reg, $text, $ms, PREG_SET_ORDER, 0)) {
foreach ($ms as $m) {
$arr[] = $m[1] . ' ~ ' . $m[2] . ' ~ ' . $m[3] . ' ~ ' . $m[4] . ' ~ ' . $m[5] . ' ~ ' . $m[6];
}
}
print_r($arr);
参见PHP demo。
输出:
Array
(
[0] => 192.25.200.4 ~ 255.255.255.192 ~ 64-9e-f3-b3-81-d3 ~ 01/08/2018 17:07:46 ~ D ~ BH1-WAP-01.local
[1] => 192.25.200.5 ~ 255.255.255.192 ~ 50-57-a8-30-11-f6 ~ 01/08/2018 16:24:59 ~ D ~ BH1-WAP-03.local
[2] => 192.25.200.6 ~ 255.255.255.192 ~ f0-f7-55-df-c4-ff ~ 01/08/2018 16:45:04 ~ D ~ BH1-WAP-02.local
[3] => 192.25.200.7 ~ 255.255.255.192 ~ 00-23-24-bb-ce-83 ~ 04/08/2018 10:55:00 ~ D ~ CESTA1703043.LOCAL
[4] => 192.25.200.68 ~ 255.255.255.192 ~ 28-94-0f-05-ac-6c ~ 01/08/2018 03:14:46 ~ D ~ WAP-C12-01-1047.local
[5] => 192.28.211.27 ~ 255.255.255.0 ~ 00-0a-13-00-00-00-00 ~ NEVER EXPIRES ~ U ~ CFCameraNearlockers
[6] => 192.28.194.254 ~ 255.255.255.0 ~ 00-48-32-95-85 ~ INACTIVE ~ N ~ bms
)
您好,我一直在尝试不使用 preg_replace 和 preg_match 替换某些元素,基本上我正在转换 dhcp 租用输出,以便我可以将元素插入数据库。
我可以在 notepad++ 中做我需要的事情,但我想使用 php 自动化它这是我在 notepad++ 中的正则表达式步骤:
步骤 1)代码
\s?-(\w)-\s?
~
第 2 步)租赁
-\s?(\d\d/\d\d/\d\d\d\d\s\d\d:\d\d:\d\d|NEVER EXPIRES|INACTIVE)\s?
~~
步骤 3) 识别 IP
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+?-\s?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
~
步骤 4)ID mac
\s?-\s?(([0-9A-Fa-f]{2}[:-]){3,6}([0-9A-Fa-f]{2}))
~
所需的输出将是每个元素由波浪符号分隔 ~ 准备展开成一个数组,我可以在插入语句中使用:
192.25.200.4 ~ 255.255.255.192~ 64-9e-f3-b3-81-d3 ~01/08/2018 17:07:46 ~D~ BH1-WAP-01.local
这里是一些测试数据:
Changed the current scope context to 192.25.200.0 scope.
Type : N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
============================================================================================
IP Address - Subnet Mask - Unique ID - Lease Expires -Type -Name
============================================================================================
192.25.200.4 - 255.255.255.192- 64-9e-f3-b3-81-d3 -01/08/2018 17:07:46 -D- BH1-WAP-01.local
192.25.200.5 - 255.255.255.192- 50-57-a8-30-11-f6 -01/08/2018 16:24:59 -D- BH1-WAP-03.local
192.25.200.6 - 255.255.255.192- f0-f7-55-df-c4-ff -01/08/2018 16:45:04 -D- BH1-WAP-02.local
192.25.200.7 - 255.255.255.192- 00-23-24-bb-ce-83 -04/08/2018 10:55:00 -D- CESTA1703043.LOCAL
No of Clients(version 4): 4 in the Scope : 192.25.200.0.
Command completed successfully.
Changed the current scope context to 192.25.200.64 scope.
Type : N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
============================================================================================
IP Address - Subnet Mask - Unique ID - Lease Expires -Type -Name
============================================================================================
192.25.200.68 - 255.255.255.192- 28-94-0f-05-ac-6c -01/08/2018 03:14:46 -D- WAP-C12-01-1047.local
No of Clients(version 4): 1 in the Scope : 192.25.200.64.
Command completed successfully.
Changed the current scope context to 192.28.211.0 scope.
192.28.211.27 - 255.255.255.0 -00-0a-13-00-00-00-00- NEVER EXPIRES -U- CFCameraNearlockers
Changed the current scope context to 192.28.194.0 scope.
192.28.194.254 - 255.255.255.0 -00-48-32-95-85 - INACTIVE -N- bms
您可以使用
'~^(\d{1,3}(?:\.\d{1,3}){3})\s*-\s*((?1))\s*-\s*((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})\s*-\s*(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)\s*-\s*(\w)\s*-\s*(.*)$~m'
并替换为
' ~ ~ ~ ~ ~ '
详情
^
- 行首(\d{1,3}(?:\.\d{1,3}){3})
- 第 1 组:1 到 3 位数字,然后出现 3 次.
,后跟 1 到 3 位数字\s*-\s*
- 包含 0+ 个空格的-
((?1))
- 第 2 组:捕获第 1 组模式\s*-\s*
- 包含 0+ 个空格的-
((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})
- 第 3 组:3 到 6 次出现 2 个十六进制字符,后跟:
或-
,然后是 2 个十六进制字符\s*-\s*
- 包含 0+ 个空格的-
(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)
- 第 4 组:2 位数字,/
,2 位数字,/
,4 位数字,一个空格,2 位数字,然后出现 2 次:
和 2 位数字\s*-\s*
- 包含 0+ 个空格的-
(\w)
- 第 5 组:一个单词 char\s*-\s*
- 包含 0+ 个空格的-
(.*)
- 第 6 组:行的其余部分$
- 一行结束。
如果您只需要抓取这些行并重新格式化,请使用
$text = <YOUR TEXT>;
$reg = '~^(\d{1,3}(?:\.\d{1,3}){3})\s*-\s*((?1))\s*-\s*((?:[0-9A-Fa-f]{2}[:-]){3,6}[0-9A-Fa-f]{2})\s*-\s*(\d\d/\d\d/\d{4}\s\d\d(?::\d\d){2}|NEVER EXPIRES|INACTIVE)\s*-\s*(\w)\s*-\s*(.*)$~m';
$arr = [];
if (preg_match_all($reg, $text, $ms, PREG_SET_ORDER, 0)) {
foreach ($ms as $m) {
$arr[] = $m[1] . ' ~ ' . $m[2] . ' ~ ' . $m[3] . ' ~ ' . $m[4] . ' ~ ' . $m[5] . ' ~ ' . $m[6];
}
}
print_r($arr);
参见PHP demo。
输出:
Array
(
[0] => 192.25.200.4 ~ 255.255.255.192 ~ 64-9e-f3-b3-81-d3 ~ 01/08/2018 17:07:46 ~ D ~ BH1-WAP-01.local
[1] => 192.25.200.5 ~ 255.255.255.192 ~ 50-57-a8-30-11-f6 ~ 01/08/2018 16:24:59 ~ D ~ BH1-WAP-03.local
[2] => 192.25.200.6 ~ 255.255.255.192 ~ f0-f7-55-df-c4-ff ~ 01/08/2018 16:45:04 ~ D ~ BH1-WAP-02.local
[3] => 192.25.200.7 ~ 255.255.255.192 ~ 00-23-24-bb-ce-83 ~ 04/08/2018 10:55:00 ~ D ~ CESTA1703043.LOCAL
[4] => 192.25.200.68 ~ 255.255.255.192 ~ 28-94-0f-05-ac-6c ~ 01/08/2018 03:14:46 ~ D ~ WAP-C12-01-1047.local
[5] => 192.28.211.27 ~ 255.255.255.0 ~ 00-0a-13-00-00-00-00 ~ NEVER EXPIRES ~ U ~ CFCameraNearlockers
[6] => 192.28.194.254 ~ 255.255.255.0 ~ 00-48-32-95-85 ~ INACTIVE ~ N ~ bms
)