PHP RegEx 还原断言以获得相反的匹配

标签 php regex

这是我的第一个问题,所以请多多关照 :)。我正在尝试构建一个正则表达式来获取一组有效的 IP(好的,至少使用正确的 IPv4 格式)而不是根据 RFC 1918 的私有(private) IP。到目前为止,我已经找到了一种方法恰恰相反,我的意思是成功匹配私有(private) IP,所以我需要的只是一种恢复断言的方法。这是到目前为止的代码:

// This is an example string
$ips = '10.0.1.23, 192.168.1.2, 172.24.2.189, 200.52.85.20, 200.44.85.20';

preg_match_all('/(?:10\.\d{1,3}|172\.(?:1[6-9]|2\d|3[01])|192\.168)\.\d{1,3}\.\d{1,3}/', $ips, $matches);

print_r($matches);

// Prints:
Array
(
  [0] => Array
  (
    [0] => 10.0.1.23
    [1] => 192.168.1.2
    [2] => 172.24.2.189
  )
)

我想要的结果是:

Array
(
  [0] => Array
  (
    [0] => 200.52.85.20
    [1] => 200.44.85.20
  )
)

我已经尝试将表达式的第一部分(前瞻)更改为负数(?!),但这会弄乱结果,甚至不会切换结果。

如果您需要更多信息,请随时询问,非常感谢。

最佳答案

有一个 PHP 函数:filter_var() .检查这些常量:FILTER_FLAG_IPV4FILTER_FLAG_NO_PRIV_RANGE

但是,如果您仍想使用正则表达式解决此问题,我建议您将问题分为两部分:首先提取所有 IP 地址,然后过滤掉私有(private)地址。

关于PHP RegEx 还原断言以获得相反的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472849/

相关文章:

javascript - 正则表达式 - 仅完整的单词而不是特定字符之后

regex - 前后没有字母数字字符的术语

c# - 使用带有 'or' 运算符的正则表达式并获得匹配的组?

PHP通过复选框 bool 值更改数据库的多个值

javascript - 使用 javascript 正则表达式自动链接 URL

php 语法 $a = $b = 1;

php - 运算符优先级取决于语言或独立

Java正则表达式仅替换html文件中的文本

php - Magento松节油 Varnish 不能正常工作

PHP - 最高效的字典代码