Вам не нужен этот комплекс регулярных выражений здесь.Используйте это регулярное выражение, чтобы вытащить IP-адреса внутри первого набора скобок:
members \{(.*)\}
Возьмите первую группу (что находится в скобках).Затем explode()
на {}
, чтобы получить каждый IP.Переберите каждое значение, обрежьте его и убедитесь, что оно не пустое.
Редактировать
Попробуйте это:
$membersStr = "members { 167.69.27.151:4449 {} 167.69.27.153:4449 {} }";
$ips = explode("{", $membersStr, 2);
$ips = explode("{}", $ips[1]);
foreach ($ips as $ip){
$ip = trim($ip);
if ($ip != "" && $ip != "}")
echo $ip . "<br/>";
}
ОБРАЗЕЦ ВЫТЯЖЕН ИЗ ФАЙЛА
members {
167.69.97.48:4440 {
session user disabled
}
167.69.97.91:4440 {}
}
Редактировать
Используйте другой ответ, но вот так:
$membersStr = @" members {
167.69.97.48:4440 {
session user disabled
}
167.69.97.91:4440 {}
}";
preg_match_all('/\d+\.\d+\.\d+\.\d+/', $membersStr, $nodesArray);
foreach ($nodesArray[0] as $ip)
echo $ip . "<br/>";