多个ip地址的正则表达式

时间:2015-07-29 07:34:18

标签: php regex

我在php中有一个像这样的字符串。

$str = "192.168.10.1;10.192.10.10;" //Contains repeated ip addresses

我想通过preg_match函数使用正则表达式验证它,但我无法为它创建正则表达式。 我创建了以下内容:/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\;\z/

但这只会在第一次验证之前进行验证';'不是那之后。

提前致谢

2 个答案:

答案 0 :(得分:1)

不是RegEx解决方案,但使用ip2long函数正常工作:

<?php
$str = "192.168.10.1;10.192.10.10;256.10.10.10";

$ips = explode(";", $str);

foreach ($ips as $ip) {
    if (strlen($ip) > 0  && ip2long($ip) === false) {
        echo $ip." is not valid.";
    }
}

答案 1 :(得分:0)

我建议使用preg_match_all()代替preg_match()preg_match_all()捕获主题字符串上的所有模式..

并且您还应该删除模式中的^,因为它只会匹配主题字符串开头的模式。

我已经尝试过这段代码而且工作得很好:

<?php
  $str = "192.168.10.1;10.192.10.10;";
  $pattern = "/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\;/";
  $match = array();
  preg_match_all($pattern, $str, $match);

  print_r($match);
?>

输出:

Array
(
    [0] => Array
    (
        [0] => 192.168.10.1;
        [1] => 10.192.10.10;
    )

)