Практическое руководство. Извлечение протокола и номера порта из URL-адреса

В следующем примере выполняется извлечение протокола и номера порта из URL-адреса.

Пример

В примере используется метод Match.Result для возврата протокола, за которым через двоеточие следует номер порта.

Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim url As String = "https://www.contoso.com:8080/letters/readme.html" 
      Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/")
      Dim m As Match = r.Match(url)
      If m.Success Then
         Console.WriteLine(r.Match(url).Result("${proto}${port}"))
      End If   
   End Sub
End Module
' The example displays the following output:
'       http:8080
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string url = "https://www.contoso.com:8080/letters/readme.html";

      Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/");
      Match m = r.Match(url);
      if (m.Success)
         Console.WriteLine(r.Match(url).Result("${proto}${port}")); 
   }
}
// The example displays the following output:
//       http:8080

Возможные интерпретации шаблона регулярного выражения ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ показаны в следующей таблице.

Шаблон

Описание

^

Соответствие должно обнаруживаться в начале строки.

(?<proto>\w+)

Совпадение с одним или несколькими символами слова. Эта группа должна получить имя proto.

://

Соответствует двоеточию, за которым следуют две косые черты.

[^/]+?

Соответствует одному или нескольким вхождениям (но как можно меньшему числу) любого символа, отличного от косой черты.

(?<port>:\d+)?

Соответствует вхождениям в количестве 0 или 1 двоеточия, за которым следует одна или несколько цифр. Эта группа должна получить имя port.

/

Соответствует косой черте.

Метод Match.Result разворачивает последовательность замены ${proto}${port}, которая объединяет захваченное значение двух именованных групп в шаблон регулярного выражения. Это удобная альтернатива явному объединению строк, извлеченных из объекта коллекции, который был возвращен свойством Match.Groups.

В следующем примере используется метод Match.Result с двумя подстановками, ${proto} и${port}, для включения захваченных групп в выходную строку. Вместо этого, можно извлечь захваченные группы из соответствующего объекта GroupCollection, как показано в следующем примере кода.

Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value); 

См. также

Основные понятия

Регулярные выражения в .NET Framework