Застрял с использованием PHP и Regex, чтобы подготовить вывод DHCP для MYSQL

Привет я пытался не преобладать, чтобы заменить некоторые элементы, используя preg_replace и preg_match, в основном я конвертирую вывод аренды DHCP, чтобы я мог вставить элементы в базу данных.

Я могу делать именно то, что мне нужно в notepad ++, но я хотел автоматизировать это с помощью php, вот мои шаги регулярных выражений в notepad ++:

Шаг 1) КОД

\s?-(\w)-\s?
\1~

Шаг 2) АРЕНДА

-\s?(\d\d/\d\d/\d\d\d\d\s\d\d:\d\d:\d\d|NEVER EXPIRES|INACTIVE)\s?
~\1~

Шаг 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})
\1~\2

Шаг 4) Идентифицируйте Mac

 \s?-\s?(([0-9A-Fa-f]{2}[:-]){3,6}([0-9A-Fa-f]{2}))
~\1

Желаемым результатом будет каждый элемент, разделенный символом тильды, готовый взорваться в массив, который я могу использовать в операторе вставки:

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

2

Решение

Вы можете использовать

'~^(\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'

и заменить на

'$1 ~ $2 ~ $3 ~ $4 ~ $5 ~ $6'

Увидеть regex demo

подробности

  • ^ — начало строки
  • (\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: слово чар
  • \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 демо.

Выход:

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
)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]