Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 括号正则表达式_Php_Regex - Fatal编程技术网

Php 括号正则表达式

Php 括号正则表达式,php,regex,Php,Regex,在php中使用正则表达式如何将每个IP存储到单独的变量中 它将从一个日志文件中抓取如下所示的内容 1/27/2013 7:34:14 AM Removed {109.104.19.75} 1/27/2013 7:34:16 AM Added {98.119.183.235} 1/27/2013 7:34:17 AM Removed {98.119.183.235} 1/27/2013 7:34:34 AM Added {89.155

在php中使用正则表达式如何将每个IP存储到单独的变量中

它将从一个日志文件中抓取如下所示的内容

1/27/2013 7:34:14 AM Removed        {109.104.19.75}
1/27/2013 7:34:16 AM Added          {98.119.183.235}
1/27/2013 7:34:17 AM Removed        {98.119.183.235}
1/27/2013 7:34:34 AM Added          {89.155.107.178}
1/27/2013 7:34:35 AM Removed        {89.155.107.178}

此脚本读取日志文件并将IP地址作为数组返回。我建议为此使用数组,因为与单独的变量相比,使用PHP可以更好地处理它:

function readIps($filename, $unique = false) {
    $lines  = file($filename);
    $result = array();

    foreach ($lines as $line) {
        if (preg_match('/\{([^\}]+)\}$/', $line, $matches)) {
            $result[] = $matches[1];
        }
    }

    return $unique ? array_values(array_unique($result)) : $result;
}
如果您确信,此脚本假定在每行末尾的括号之间只列出IP地址。如果不是这样,正则表达式还将匹配IP地址以外的其他内容,并且必须更加特殊


只要用你的文件名来调用它,你就会得到一个IP列表,只要它出现的频率是多少。将第二个参数设置为
true
调用它,您将得到一个列表,其中每个IP只出现一次。

它们是否必须位于单独的变量中,为什么不将它们全部存储在一个数组中?只需迭代日志文件中的行(逐行读取),并使用简单的正则表达式提取IP。您可以使用迭代计数器作为键构建IP数组。为什么要把事情弄得更复杂呢;var_dump($b[1]);这里甚至不需要正则表达式。只需简单的子字符串即可。谢谢farmer1992,这正是我所需要的!