伪IPv4正则表达式

时间:2012-06-05 22:32:17

标签: c# regex

假设最大IP可以在每个“点”括号中包含最大数量999,即。 999.999.999.999是最大的。我已经检查了计算器中的正则表达式([0-9] +。){3} [0-9]。那么,为什么程序会抛出运行时错误“解析”?([0-9] +。){3} [0-9]“ - Quantifier {x,y}什么都没有。”?

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace RegExCs
{
    class Program
    {
        static void Main(string[] args)
        {
            string rawData;
            Regex filter = new Regex(@"?<ip>([0-9]+\.){3}[0-9]"); //run-time error 

            rawData=File.ReadAllText("Query list");

            MatchCollection theMatches = filter.Matches(rawData);

            foreach (Match theMatch in theMatches)
            {
                Console.WriteLine("ip: {0}\n",theMatch.Groups["ip"]);
            }


            Console.ReadKey();

        }
    }
}

Official help page 对我没有那么帮助。

“查询列表”文件内容:

Reply from 212.77.100.101 www.wp.pl time: 21:37
Reply from 111.41.130.55 www.dupa.pl time: 05:33
Reply from 230.77.100.101 www.whatanannoyingbug.com time: 04:12
Reply from 65.77.100.101 www.foooo.org time: 12:55
Reply from 200.77.100.101 www.example.com time: 07:56

2 个答案:

答案 0 :(得分:4)

您需要用括号括起整个正则表达式,将?<ip>([0-9]+\.){3}[0-9]更改为以下内容:

(?<ip>([0-9]+\.){3}[0-9])

这是必要的,因为创建命名组的?<name>语法仅在开括号后立即起作用,否则?表示&#34;使前一个元素可选&#34;。由于?之前没有前一个元素,因此收到错误。

答案 1 :(得分:1)

我会用它来确保它是一个真实的(0-255)IP地址:

(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))