关于php:多个ip地址的正则表达式

regular expression for multiple ip address

本问题已经有最佳答案,请猛点这里访问。

我有一个这样的PHP字符串。

1
$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/

但这只在第一个";"之前有效,而不是在之后。

提前谢谢


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

1
2
3
4
5
6
7
8
9
10
<?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.";
    }
}


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

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

我已经尝试过这个代码,并且工作得很好:

1
2
3
4
5
6
7
8
<?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);
?>

输出:

1
2
3
4
5
6
7
8
9
Array
(
    [0] => Array
    (
        [0] => 192.168.10.1;
        [1] => 10.192.10.10;
    )

)