1
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])"+@"(?<time>(\s[0-2][0-9]:[0-9][0-9]))");


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

            MatchCollection theMatches = filter.Matches(rawData);

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


            Console.ReadKey();

        }
    }
}

「クエリリスト」ファイル:

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

このプログラムはコンパイルして実行しますが、空のコンソールウィンドウが常に開いています。なんで?

4

1 に答える 1

3

正規表現に一致するものがないため

@"(?<ip>([0-9]+\.){3}[0-9])(?<time>(\s[0-2][0-9]:[0-9][0-9]))"

ip2つの文字列を連結するだけで、複合正規表現は、文字列の後にtime他の文字列(スペースさえも)がないことを期待します。

次のように変更する必要があります

@"(?<ip>([0-9]+\.){3}[0-9]).*(?<time>(\s[0-2][0-9]:[0-9][0-9]))"
                           ^------- "anything" between first and second group
于 2012-06-09T22:47:07.163 に答える