Intereting Posts
Как обновить статус строки с помощью jQuery change () и отобразить в соответствующей таблице Завершить набор результатов перед вставкой данных в БД php получает два разных элемента случайных массивов PHP не столь фатальные ошибки с "новым SoapClient ()" Запрос списка многодневных событий, происходящих между сегодня и одной неделей с сегодняшнего дня, в зависимости от даты начала и окончания API Paypal с PHP и cURL PHP 2D Array выводит все комбинации Как заблокировать 100 000+ индивидуальных IP-адресов Учетная запись службы календаря Google с API-интерфейсом PHP oauth2.0 – Как получить доступ к календарям, которые не используются совместно Joomla if else для меню по ID или URL-адресу Могу ли я использовать логическое «или» в случае с предложением оператора PHP? phpunit mock метод несколько вызовов с разными аргументами Как проверить, существует ли почтовый адрес без отправки электронной почты? Codeigniter передает переменную в файл php с помощью json Строка формата php sprintf

Regex извлекает только IPv4-адреса из текста

Я попытался извлечь только IP-адреса из данного примера ввода, но он извлекает с ним какой-то текст. Вот мой код:

$spfreccord="v=spf1 include:amazonses.com include:nl2go.com include:smtproutes.com include:smtpout.com ip4:46.163.100.196 ip4:46.163.100.194 ip4:85.13.135.76 ~all"; $regexIpAddress = '/ip[4|6]:([\.\/0-9a-z\:]*)/'; preg_match($regexIpAddress, $spfreccord, $ip_match); var_dump($ip_match); 

Я ищу, чтобы соответствовать только IPv4 IP-адресу xxx.xxx.xxx.xxx в каждом столбце таблицы, но похоже, что $regexIpAddress .

Не могли бы вы помочь мне найти правильное регулярное выражение для извлечения только IP-адресов IPv4? Благодарю.

    Используйте следующее регулярное выражение:

     /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:\/\d{2})?/ 

    Итак, для этого:

     $spfreccord="v=spf1 include:amazonses.com include:nl2go.com include:smtproutes.com include:smtpout.com ip4:46.163.100.196 ip4:46.163.100.194 ip4:85.13.135.76 cidr class v=spf1 ip4:205.201.128.0/20 ip4:198.2.128.0/18 ~all"; $regexIpAddress = '/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:\/\d{2})?/'; preg_match_all($regexIpAddress, $spfreccord, $ip_match); var_dump($ip_match); 

    дает:

     array(1) { [0]=> array(5) { [0]=> string(14) "46.163.100.196" [1]=> string(14) "46.163.100.194" [2]=> string(12) "85.13.135.76" [3]=> string(16) "205.201.128.0/20" [4]=> string(14) "198.2.128.0/18" } } 

    Вы хотите preg_match_all() и небольшую модификацию вашего регулярного выражения:

     php > $regexIpAddress = '/ip4:([0-9.]+)/'; php > preg_match_all($regexIpAddress, $spfreccord, $ip_match); php > var_dump($ip_match[1]); array(3) { [0]=> string(14) "46.163.100.196" [1]=> string(14) "46.163.100.194" [2]=> string(12) "85.13.135.76" } php > 

    Вам не нужно сопоставляться с az ; это не действительная часть IP-адреса, 4 или 6. Поскольку вы сказали, что хотите только IPv4, я исключил любое соответствие адресов IPv6.

    Если вы хотите включить IPv6, вы можете сделать это:

     php > $regexIpAddress = '/ip[46]:([0-9a-f.:]+)/'; php > preg_match_all($regexIpAddress, $spfreccord, $ip_match); php > var_dump($ip_match[1]); array(4) { [0]=> string(14) "46.163.100.196" [1]=> string(14) "46.163.100.194" [2]=> string(12) "85.13.135.76" [3]=> string(39) "2001:0db8:85a3:0000:0000:8a2e:0370:7334" }