Как преобразовать массив в экранированную строку, которую я могу использовать в регулярном выражении?

1

Я запрашиваю подсерии из базы данных. В конечном итоге я получу кучу подсетей в массив строк с такими результатами, как:

array = ['10.1.0.1/24', '10.2.0.2/24', '192.168.0.8/16']

Какой лучший способ присоединиться к массиву выше и обеспечить все . и / правильно экранированы, чтобы я мог видеть, соответствует ли строка, которая соответствует какой-либо одной из подсетей в массиве?

В идеале у меня было бы что-то вроде:

if (preg_match(array_as_string, $buffer, $matches)) { }
Теги:
string
arrays
preg-match

1 ответ

2
Лучший ответ

Сначала вы можете перебирать все значения массива с помощью array_map() и избегать их с помощью preg_quote(). После этого вы можете использовать implode() чтобы сделать их строкой, например

$array = array_map(function($ip){
    return preg_quote($ip, "/");
}, $array);

if (preg_match("/\b(" . implode("|", $array) . ")\b/", $buffer, $matches)) { }

Итак, вы получите регулярное выражение:

/\b(10\.1\.0\.1\/24|10\.2\.0\.2\/24|192\.168\.0\.8\/16)\b/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню