[Regexp, .NET] Туплю: как разобрать …

Dimart

… на протокол, имя хоста и порт (может и не быть)
Сейчас
 
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main
{
string text = @"http://www.forumlocal.ru:8080";
string pattern = @"\b(\S+)://(\S+?::([0-9]+?\b";

foreach(Group group in Regex.Match(text, pattern).Groups)
{
Console.WriteLine("Success = {0,-5}, Index = {1,-2}, Value = {2}", group.Success, group.Index, group.Value);
}
Console.ReadLine;
}
}

выводит не то.

Dasar

взять класс Uri и не заниматься самодеятельностью

Dimart

Написано Regexp, мне не для разбора URI это надо. Это пример, чтобы было понятнее.

Marusetta

\b(\S+)://(\S+?::([0-9]+?\b
\b(\S+)://([^\s:]+?::([0-9]+?\b
---
"Аллах не ведёт людей неверных."

Dimart

спасибо

Marusetta

чтобы потом не было наездов, замечу, что оно не заматчит, например, такой кусок: gopher://web.mit.edu:fakeport:70 (у тебя же не обязательно uri, верно?)
---
btw, solution
\b(\S+)://([^\s:]+(?::[^\d:]+)*?::(\d+?\b

теперь заматчит
---
btw, solution2
\b([^\s:/]+)://?:[^\s:]+?::[^\d:/]+)*?::(\d+?\b

теперь еще и неправильные варианты откинет

korsika

а такого, что ещё за пивом сгоняет нету?
Оставить комментарий
Имя или ник:
Комментарий: