我在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/
但这只会在第一次验证之前进行验证';'不是那之后。
提前致谢
答案 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;
)
)