1

最大 IP の各「ドット」括弧内に最大数 999 を含めることができるとします。つまり、999.999.999.999 が使用可能な最大値です。
電卓で正規表現 ([0-9]+.){3}[0-9] を確認しました。では、なぜプログラムは実行時エラー「"?([0-9]+.){3}[0-9]" - 数量詞 {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();

        }
    }
}

公式ヘルプページはあまり役に立ちませんでした。

「クエリ一覧」ファイルの内容:

212.77.100.101 www.wp.pl からの返信時間: 21:37
111.41.130.55 www.dupa.pl からの返信時間: 05:33
230.77.100.101 www.whatannnoyingbug.com からの返信時間: 04:12
65.77.100.101 www.foooo.org からの返信時間: 12:55
200.77.100.101 www.example.com からの返信時間: 07:56
4

2 に答える 2

4

正規表現全体を括弧で囲む必要があります?<ip>([0-9]+\.){3}[0-9]。次のように変更します。

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

これが必要なのは?<name>、名前付きグループを作成するための構文が左括弧の直後にのみ機能するためです。そうでない場合?は、「前の要素をオプションにする」ことを意味します。の前に前の要素がないため?、エラーが発生しています。

于 2012-06-05T22:42:58.613 に答える
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]))
于 2012-06-05T22:43:45.153 に答える