2012-06-05 1 views
1

Предположим, что максимальный IP может содержать максимальное число 999 в каждой «точечной» скобке, т. Е. 999.999.999.999 - самый большой доступный.
Я проверил регулярное выражение ([0-9] +.) {3} [0-9] в калькуляторе. Итак, почему программа выдает ошибку «разбора» во время выполнения? ([0-9] +.) {3} [0-9] "- Квантификатор {x, y}, следующий за ничего."?Pseudo-IPv4 regex

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 

ответ

4

Вы должны окружать все регулярное выражение со скобками, изменить ?<ip>([0-9]+\.){3}[0-9] на следующее:

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

Это необходимо, потому что ?<name> синтаксис для создания именованная группа работает сразу же после открытия круглых скобок, иначе ? означает «сделать предыдущий элемент необязательным». Поскольку перед ? нет предыдущего элемента, вы получаете сообщение об ошибке.

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])) 
+1

Я хотел бы сделать это, только если это может быть важно, чтобы правильно прочитать файл, потому что это гораздо больше и труднее читать, чем более простая версия. YMMV. –

Смежные вопросы