IP地址的正则表达式

时间:2012-06-05 18:47:04

标签: regex perl pattern-matching ex

我需要能够搜索日志并获取已记录的IP地址。示例日志行如下所示:

  

[2012-06-05 11:59:52]公告[14369] chan_sip.c:注册''失败'yy.yy.yy.yyy' - 找不到匹配的同伴

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

我正在考虑读取每一行,在' '上拆分,然后遍历拆分临时数组:'yy.yy.yy.yyy'。我只是不知道如何使用包含单引号的'yy.yy.yy.yyy'模式匹配或正则表达式。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

此正则表达式将匹配“

中包含的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,因此没有'

答案 1 :(得分:0)

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

    ... do something with $ip ...
}