Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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/8/perl/11.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
Regex IP地址的正则表达式_Regex_Perl_Pattern Matching_Ex - Fatal编程技术网

Regex IP地址的正则表达式

Regex IP地址的正则表达式,regex,perl,pattern-matching,ex,Regex,Perl,Pattern Matching,Ex,我需要能够搜索通过一个日志和抓取IP地址记录。示例日志行如下所示: [2012-06-05 11:59:52]通知[14369]chan_sip.c:从“”注册'yy.yy.yy'失败-未找到匹配的对等方 我需要获取yy.yy.yy.yy位置中列出的IP地址。对于其他日志文件,yy.yy.yy将位于不同的位置 我想读每一行,在'上拆分,然后循环拆分的临时数组:'yy.yy.yy'。我只是不知道如何在包含单引号的'yy.yy.yy'中进行模式匹配或正则表达式。我如何才能做到这一点?while(){

我需要能够搜索通过一个日志和抓取IP地址记录。示例日志行如下所示:

[2012-06-05 11:59:52]通知[14369]chan_sip.c:从“”注册'yy.yy.yy'失败-未找到匹配的对等方

我需要获取
yy.yy.yy.yy
位置中列出的IP地址。对于其他日志文件,
yy.yy.yy
将位于不同的位置

我想读每一行,在
'
上拆分,然后循环拆分的临时数组:
'yy.yy.yy'
。我只是不知道如何在包含单引号的
'yy.yy.yy'
中进行模式匹配或正则表达式。我如何才能做到这一点?

while(){
while (<>) {
    my ($ip) = $line =~ /for '((?:[0-9]+\.){3}[0-9]+)'/
       or next;

    ... do something with $ip ...
}
my($ip)=$line=~/for'((?:[0-9]+\){3}[0-9]+)'/ 或下一步; …用$ip做点什么。。。 }
此正则表达式将与'

'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
要在perl中迭代所有匹配项,请执行以下操作:

while ($subject =~ m/'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'/g) {
    # matched text = $&
}

比赛的第1组将只包含IP,因此没有“

,我使用了这一组,它提取了我需要的所有IP。谢谢你,用一个正常的日志条目比如--2012-05-12 08:10:20481 fail2ban.actions:WARNING[ssh iptables]Ban yyy.yy.yy--我不能用((?:[0-9]+\){3}[0-9]+)获取Ban IP,是的,你可以(如果那些“y”是数字)@ikegami哦,没有看到那部分,我的错误。@ikegami一行像
[Sat Jun 16 21:32:55][2012][client 208.179.17.39]文件不存在:/var/www/html/
将不会使用上述for循环进行解析。我尝试了以下
opendir(DIR,“/var/log/httpd”)或die$!;而(my$File=readdir(DIR)){next除非(-f)/var/log/httpd/$File”);if($File=~/error\\u log/){open(log,“/var/log/httpd/$File”);while(){if($\=~/File/){my($ip)=$\=~/for((?:[0-9]+\){3}[0-9]+//或next;打印“ip==>$ip\n”;}}}}关闭(日志);}}