Regex получает совпадения для диапазонов в IPv4-адресах с октетной нотацией - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу использовать выражение Regex для получения всех диапазонов в предоставленном IP-адресе.

Примеры:

192.168.0-255.1 вернет 0-255

192.168.0-255.1-10 вернет 0-255 и 1-10

192.168.0-10,42,80-200.1-10,128-255 вернет 0-10, 80-200, 1-10, 128-255.

БОНУС: Я также хотел бы иметь возможность разделить эти выражения на 4 различных выражения, чтобы определить, в каком октете находится диапазон IP-адресов. Пример: 192.168-180.0.1 Я хотел бычтобы получить 168-180 здесь из выражения, которое ищет совпадение только с одним периодом слева от подстроки и двумя периодами где-то в правой части подстроки.

1 Ответ

0 голосов
/ 11 декабря 2018

Как-то так?

<?php
$input = <<<INPUT
192.168.0-255.1
192.168.0-255.1-10
192.168.0-10,42,80-200.1-10,128-255
INPUT;

preg_match_all("/[0-9]+\-[0-9]+/m", $input, $m);

print_r($m);

Вывод:

Array
(
    [0] => Array
        (
            [0] => 0-255
            [1] => 0-255
            [2] => 1-10
            [3] => 0-10
            [4] => 80-200
            [5] => 1-10
            [6] => 128-255
        )

)

[0-9] + 1 или более число - "-" сбежал [0-9] + 1 илибольше номер

...